From 722c13a8fc093bc67b9be444547571d544cb79a0 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Wed, 30 Jun 2010 20:59:12 +0200 Subject: [PATCH 01/24] Switched over from dotemacs to doteverything --- .emacs | 35 + .emacs.d/ac-dict/c++-mode | 74 + .emacs.d/ac-dict/c-mode | 37 + .emacs.d/ac-dict/clojure-mode | 475 + .emacs.d/ac-dict/css-mode | 747 ++ .emacs.d/ac-dict/java-mode | 50 + .emacs.d/ac-dict/javascript-mode | 148 + .emacs.d/ac-dict/php-mode | 62 + .emacs.d/ac-dict/python-mode | 104 + .emacs.d/ac-dict/ruby-mode | 181 + .emacs.d/ac-dict/scheme-mode | 216 + .emacs.d/ac-dict/tcl-mode | 172 + .emacs.d/auto-complete-config.el | 480 + .emacs.d/auto-complete-config.elc | Bin 0 -> 15943 bytes .emacs.d/auto-complete.el | 1897 ++++ .emacs.d/auto-complete.elc | Bin 0 -> 59995 bytes .emacs.d/batch-mode.el | 156 + .emacs.d/color-theme.el | 1668 +++ .emacs.d/csharp-mode.el | 1977 ++++ .emacs.d/fuzzy.el | 255 + .emacs.d/fuzzy.elc | Bin 0 -> 7438 bytes .emacs.d/include.el | 16 + .emacs.d/javascript.el | 707 ++ .emacs.d/linux/.emacs | 1 + .emacs.d/popup.el | 1061 ++ .emacs.d/popup.elc | Bin 0 -> 64893 bytes .emacs.d/slash_c.el | 15 + .emacs.d/slash_functions.el | 5 + .emacs.d/slash_python.el | 17 + .emacs.d/slash_theme.el | 35 + .emacs.d/sqlplus.el | 5151 +++++++++ .emacs.d/themes/color-theme-example.el | 22 + .emacs.d/themes/color-theme-library.el | 13539 +++++++++++++++++++++++ .emacs.d/tramp | 20 + .emacs.d/vala-mode.el | 395 + .gitignore | 4 + README | 7 + install.bat | 5 + install.sh | 9 + 39 files changed, 29743 insertions(+) create mode 100644 .emacs create mode 100644 .emacs.d/ac-dict/c++-mode create mode 100644 .emacs.d/ac-dict/c-mode create mode 100644 .emacs.d/ac-dict/clojure-mode create mode 100644 .emacs.d/ac-dict/css-mode create mode 100644 .emacs.d/ac-dict/java-mode create mode 100644 .emacs.d/ac-dict/javascript-mode create mode 100644 .emacs.d/ac-dict/php-mode create mode 100644 .emacs.d/ac-dict/python-mode create mode 100644 .emacs.d/ac-dict/ruby-mode create mode 100644 .emacs.d/ac-dict/scheme-mode create mode 100644 .emacs.d/ac-dict/tcl-mode create mode 100644 .emacs.d/auto-complete-config.el create mode 100644 .emacs.d/auto-complete-config.elc create mode 100644 .emacs.d/auto-complete.el create mode 100644 .emacs.d/auto-complete.elc create mode 100644 .emacs.d/batch-mode.el create mode 100644 .emacs.d/color-theme.el create mode 100644 .emacs.d/csharp-mode.el create mode 100644 .emacs.d/fuzzy.el create mode 100644 .emacs.d/fuzzy.elc create mode 100644 .emacs.d/include.el create mode 100644 .emacs.d/javascript.el create mode 100644 .emacs.d/linux/.emacs create mode 100644 .emacs.d/popup.el create mode 100644 .emacs.d/popup.elc create mode 100644 .emacs.d/slash_c.el create mode 100644 .emacs.d/slash_functions.el create mode 100644 .emacs.d/slash_python.el create mode 100644 .emacs.d/slash_theme.el create mode 100644 .emacs.d/sqlplus.el create mode 100644 .emacs.d/themes/color-theme-example.el create mode 100644 .emacs.d/themes/color-theme-library.el create mode 100644 .emacs.d/tramp create mode 100644 .emacs.d/vala-mode.el create mode 100644 .gitignore create mode 100644 README create mode 100644 install.bat create mode 100644 install.sh diff --git a/.emacs b/.emacs new file mode 100644 index 0000000..356e464 --- /dev/null +++ b/.emacs @@ -0,0 +1,35 @@ +(load-file "~/.emacs.d/include.el") + +(if (eq system-type 'gnu/linux) ; if we're running linux + (load-file "~/.emacs.d/linux/.emacs")) + +(setq inhibit-startup-message t) ; don't show welcome +(setq-default indent-tabs-mode nil) ; spaces, no tabs +(tool-bar-mode nil) ; no toolbar +(menu-bar-mode nil) ; no menu +(line-number-mode nil) ; don't show line numbers in splitter +(global-linum-mode t) ; show line numbers in gutter +(column-number-mode t) ; show column numbers in splitter +(color-theme-weirdness) ; my theme +(global-font-lock-mode t) ; always show syntax higlighting, this may + ; be old +(fset 'yes-or-no-p 'y-or-n-p) ; don't want to have to type yes or no + +;; Vala Mode +(add-to-list 'auto-mode-alist '("\\.vala$" . vala-mode)) +(add-to-list 'auto-mode-alist '("\\.vapi$" . vala-mode)) +(add-to-list 'file-coding-system-alist '("\\.vala$" . utf-8)) +(add-to-list 'file-coding-system-alist '("\\.vapi$" . utf-8)) + +;; C# Mode +(setq auto-mode-alist (cons `("\\.cs\\'" . csharp-mode) auto-mode-alist)) + +;; Autosave location +(setq backup-directory-alist + `((".*" . ,temporary-file-directory))) +(setq auto-save-file-name-transforms + `((".*" ,temporary-file-directory t))) + +;; Autocomplete +(add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict") +(ac-config-default) \ No newline at end of file diff --git a/.emacs.d/ac-dict/c++-mode b/.emacs.d/ac-dict/c++-mode new file mode 100644 index 0000000..e3cd8ae --- /dev/null +++ b/.emacs.d/ac-dict/c++-mode @@ -0,0 +1,74 @@ +and +and_eq +asm +auto +bitand +bitor +bool +break +case +catch +char +class +compl +const +const_cast +continue +default +delete +do +double +dynamic_cast +else +enum +explicit +export +extern +false +float +for +friend +goto +if +inline +int +long +mutable +namespace +new +not +not_eq +operator +or +or_eq +private +protected +public +register +reinterpret_cast +return +short +signed +sizeof +static +static_cast +struct +switch +template +this +throw +true +try +typedef +typeid +typename +union +unsigned +using +virtual +void +volatile +wchar_t +while +xor +xor_eq diff --git a/.emacs.d/ac-dict/c-mode b/.emacs.d/ac-dict/c-mode new file mode 100644 index 0000000..496f904 --- /dev/null +++ b/.emacs.d/ac-dict/c-mode @@ -0,0 +1,37 @@ +auto +_Bool +break +case +char +_Complex +const +continue +default +do +double +else +enum +extern +float +for +goto +if +_Imaginary +inline +int +long +register +restrict +return +short +signed +sizeof +static +struct +switch +typedef +union +unsigned +void +volatile +while diff --git a/.emacs.d/ac-dict/clojure-mode b/.emacs.d/ac-dict/clojure-mode new file mode 100644 index 0000000..16348ed --- /dev/null +++ b/.emacs.d/ac-dict/clojure-mode @@ -0,0 +1,475 @@ +*agent* +*clojure-version* +*command-line-args* +*compile-files* +*compile-path* +*err* +*file* +*flush-on-newline* +*in* +*ns* +*out* +*print-dup* +*print-length* +*print-level* +*print-meta* +*print-readably* +*read-eval* +*warn-on-reflection* +accessor +aclone +add-classpath +add-watch +agent +agent-error +agent-errors +aget +alength +alias +all-ns +alter +alter-meta! +alter-var-root +amap +ancestors +and +apply +areduce +array-map +aset +aset-boolean +aset-byte +aset-char +aset-double +aset-float +aset-int +aset-long +aset-short +assert +assoc +assoc! +assoc-in +associative? +atom +await +await-for +bases +bean +bigdec +bigint +binding +bit-and +bit-and-not +bit-clear +bit-flip +bit-not +bit-or +bit-set +bit-shift-left +bit-shift-right +bit-test +bit-xor +boolean +boolean-array +booleans +bound-fn +bound-fn* +butlast +byte +byte-array +bytes +case +cast +char +char-array +char-escape-string +char-name-string +char? +chars +class +class? +clear-agent-errors +clojure-version +coll? +comment +commute +comp +comparator +compare +compare-and-set! +compile +complement +concat +cond +condp +conj +conj! +cons +constantly +construct-proxy +contains? +count +counted? +create-ns +create-struct +cycle +dec +decimal? +declare +definline +defmacro +defmethod +defmulti +defn +defn- +defonce +defprotocol +defstruct +deftype +delay +delay? +deliver +deref +derive +descendants +disj +disj! +dissoc +dissoc! +distinct +distinct? +doall +doc +dorun +doseq +dosync +dotimes +doto +double +double-array +doubles +drop +drop-last +drop-while +dtype +empty +empty? +ensure +enumeration-seq +error-handler +error-mode +eval +even? +every? +extend +extend-class +extend-protocol +extend-type +extenders +extends? +false? +ffirst +file-seq +filter +find +find-doc +find-ns +find-var +first +float +float-array +float? +floats +flush +fn +fn? +fnext +for +force +format +future +future-call +future-cancel +future-cancelled? +future-done? +future? +gen-class +gen-interface +gensym +get +get-in +get-method +get-proxy-class +get-thread-bindings +get-validator +hash +hash-map +hash-set +identical? +identity +if-let +if-not +ifn? +import +in-ns +inc +init-proxy +instance? +int +int-array +integer? +interleave +intern +interpose +into +into-array +ints +io! +isa? +iterate +iterator-seq +juxt +key +keys +keyword +keyword? +last +lazy-cat +lazy-seq +let +letfn +line-seq +list +list* +list? +load +load-file +load-reader +load-string +loaded-libs +locking +long +long-array +longs +loop +macroexpand +macroexpand-1 +make-array +make-hierarchy +map +map? +mapcat +max +max-key +memfn +memoize +merge +merge-with +meta +methods +min +min-key +mod +name +namespace +neg? +newline +next +nfirst +nil? +nnext +not +not-any? +not-empty +not-every? +not= +ns +ns-aliases +ns-imports +ns-interns +ns-map +ns-name +ns-publics +ns-refers +ns-resolve +ns-unalias +ns-unmap +nth +nthnext +num +number? +object-array +odd? +or +parents +partial +partition +pcalls +peek +persistent! +pmap +pop +pop! +pop-thread-bindings +pos? +pr +pr-str +prefer-method +prefers +print +print-namespace-doc +print-str +printf +println +println-str +prn +prn-str +promise +proxy +proxy-mappings +proxy-super +push-thread-bindings +pvalues +quot +rand +rand-int +range +ratio? +rationalize +re-find +re-groups +re-matcher +re-matches +re-pattern +re-seq +read +read-line +read-string +reduce +ref +ref-history-count +ref-max-history +ref-min-history +ref-set +refer +refer-clojure +reify +release-pending-sends +rem +remove +remove-method +remove-ns +remove-watch +repeat +repeatedly +replace +replicate +require +reset! +reset-meta! +resolve +rest +restart-agent +resultset-seq +reverse +reversible? +rseq +rsubseq +satisfies? +second +select-keys +send +send-off +seq +seq? +seque +sequence +sequential? +set +set-error-handler! +set-error-mode! +set-validator! +set? +short +short-array +shorts +shutdown-agents +slurp +some +sort +sort-by +sorted-map +sorted-map-by +sorted-set +sorted-set-by +sorted? +special-form-anchor +special-symbol? +split-at +split-with +str +stream? +string? +struct +struct-map +subs +subseq +subvec +supers +swap! +symbol +symbol? +sync +syntax-symbol-anchor +take +take-last +take-nth +take-while +test +the-ns +time +to-array +to-array-2d +trampoline +transient +tree-seq +true? +type +unchecked-add +unchecked-dec +unchecked-divide +unchecked-inc +unchecked-multiply +unchecked-negate +unchecked-remainder +unchecked-subtract +underive +update-in +update-proxy +use +val +vals +var-get +var-set +var? +vary-meta +vec +vector +vector-of +vector? +when +when-first +when-let +when-not +while +with-bindings +with-bindings* +with-in-str +with-local-vars +with-meta +with-open +with-out-str +with-precision +xml-seq +zero? +zipmap \ No newline at end of file diff --git a/.emacs.d/ac-dict/css-mode b/.emacs.d/ac-dict/css-mode new file mode 100644 index 0000000..4ec8f7d --- /dev/null +++ b/.emacs.d/ac-dict/css-mode @@ -0,0 +1,747 @@ +!important +ActiveBorder +ActiveCaption +Alpha +AppWorkspace +Background +Barn +BasicImage +Blinds +Blur +ButtonFace +ButtonHighlight +ButtonShadow +ButtonText +CaptionText +CheckerBoard +Chroma +Compositor +CradientWipe +DXImageTransform +DropShadow +Emboss +Engrave +Fade +FlipH +FlipV +Glow +Gray +GrayText +Highlight +HighlightText +Hz +ICMFilter +InactiveBorder +InactiveCaption +InactiveCaptionText +InfoBackground +InfoText +Inset +Invert +Iris +Light +MaskFilter +Matrix +Menu +MenuText +Microsoft +MotionBlur +Pixelate +RadialWipe +RandomBars +RandomDissolve +RevealTrans +Scrollbar +Shadow +Slide +Spiral +Stretch +Strips +ThreeDDarkShadow +ThreeDFace +ThreeDHighlight +ThreeDLightShadow +ThreeDShadow +Wave +Wheel +Window +WindowFrame +WindowText +Xray +Zigzag +_azimuth +_background +_background-position-x +_background-position-y +_border +_bottom +_caption +_clear +_clip +_color +_content +_counter +_cue +_cursor +_direction +_display +_elevation +_empty +_filter +_filter:progid:DXImageTransform.Microsoft +_float +_font +_height +_ime +_ime-mode +_layout +_layout-flow +_layout-grid +_layout-grid-char +_layout-grid-line +_layout-grid-mode +_layout-grid-type +_left +_letter +_line +_line-break +_list +_margin +_orphans +_outline +_overflow +_overflow-x +_overflow-y +_padding +_page +_pause +_pitch +_play +_position +_quotes +_richness +_right +_ruby +_ruby-align +_ruby-overhang +_ruby-position +_scrollbar +_scrollbar-3dlight-color +_scrollbar-arrow-color +_scrollbar-base-color +_scrollbar-darkshadow-color +_scrollbar-face-color +_scrollbar-highlight-color +_scrollbar-track-color +_speak +_speech +_stress +_table +_text +_text-align-last +_text-autospace +_text-justify +_text-kashida-space +_text-overflow +_text-underline-position +_top +_unicode +_vertical +_visibility +_voice +_volume +_white +_widows +_width +_word +_word-break +_word-wrap +_writing +_writing-mode +_z +_zoom +above +active +adjust +after +aliceblue +align +always +antiquewhite +aqua +aquamarine +armenian +arrow +attachment +auto +autospace +avoid +azimuth +azure +background +background-attachment +background-color +background-image +background-position +background-repeat +bar +base +baseline +before +behind +beige +below +bidi +bidi-override +bisque +black +blanchedalmond +blink +block +blue +blueviolet +bold +bolder +border +border-bottom +border-bottom-color +border-bottom-style +border-bottom-width +border-collapse +border-color +border-left +border-left-color +border-left-style +border-left-width +border-right +border-right-color +border-right-style +border-right-width +border-spacing +border-style +border-top +border-top-color +border-top-style +border-top-width +border-width +both +bottom +box +break +brown +burlwood +cadetblue +capitalize +caps +caption +caption-side +cell +cells +center +center-left +center-right +char +chartreuse +chocolate +circle +cjk +cjk-ideographic +clear +clip +close +close-quote +cm +code +collapse +color +column +compact +condensed +content +continuous +coral +cornflowerblue +cornsilk +counter +counter-increment +counter-reset +crimson +crop +cross +crosshair +cue +cue-after +cue-before +cursive +cursor +cyan +darkblue +darkcyan +darkgoldenrod +darkgray +darkgreen +darkkhaki +darkmagenta +darkolivegreen +darkorange +darkorchid +darkred +darksalmon +darkseagreen +darkshadow +darkslateblue +darkslategray +darkturquoise +darkviolet +dashed +decimal +decimal-leading-zero +decoration +deeppink +deepskyblue +default +deg +digits +dimgray +direction +disc +display +dodgerblue +dotted +double +during +e +e-resize +elevation +em +embed +empty +empty-cells +ex +expanded +extra +extra-condensed +extra-expanded +face +family +fantasy +far +far-left +far-right +fast +faster +firebrick +first +first-child +first-letter +first-line +fixed +float +floralwhite +flow +focus +font +font-family +font-size +font-size-adjust +font-stretch +font-style +font-variant +font-weight +footer +forestgreen +fuchsia +gainsboro +georgian +ghostwhite +gold +goldenrod +gray +greek +green +greenyellow +grid +groove +group +header +hebrew +height +help +hidden +hide +high +higher +hiragana +hiragana-iroha +honeydew +hotpink +hover +icon +ideographic +image +in +increment +indent +index +indianred +indigo +inherit +inline +inline-block +inline-table +inset +inside +iroha +italic +item +ivory +justify +kHz +kashida +katakana +katakana-iroha +khaki +landscape +lang() +large +larger +last +latin +lavender +lavenderblush +lawngreen +layout +leading +left +left-side +leftwards +lenonchiffon +letter +letter-spacing +level +lightblue +lightcoral +lightcyan +lighter +lightgoldenrodyellow +lightgray +lightgreen +lightgrey +lightpink +lightsalmon +lightseagreen +lightskyblue +lightslategray +lightsteelblue +lightyellow +lime +limegreen +line +line-height +line-through +linen +link +list +list-item +list-style +list-style-image +list-style-position +list-style-type +loud +low +lower +lower-alpha +lower-greek +lower-latin +lower-roman +lowercase +ltr +magenta +margin +margin-bottom +margin-left +margin-right +margin-top +marker +marker-offset +marks +maroon +max +max-height +max-width +medium +mediumaquamarine +mediumblue +mediumorchid +mediumpurple +mediumseagreen +mediumslateblue +mediumspringgreen +mediumturquoise +mediumvioletred +menu +message +message-box +middle +midnightblue +min +min-height +min-width +mintcream +mistyrose +mix +mm +moccasin +mode +monospace +move +ms +n +n-resize +naby +narrower +navajowhite +ne +ne-resize +no +no-close-quote +no-open-quote +no-repeat +none +normal +nowrap +number +numeral +nw +nw-resize +oblique +offset +oldlace +olive +olivedrab +once +open +open-quote +orange +orangered +orchid +orphans +out +outline +outline-color +outline-style +outline-width +outset +outside +overflow +overhang +overline +override +padding +padding-bottom +padding-left +padding-right +padding-top +page +page-break-after +page-break-before +page-break-inside +palegoldenrod +palegreen +paleturquoise +palevioletred +papayawhip +pause +pause-after +pause-before +pc +peachpuff +peru +pink +pitch +pitch-range +play +play-during +plum +pointer +portarait +position +powderblue +pre +pre-line +pre-wrap +progid +progress +pt +punctuation +purple +px +quote +quotes +rad +range +rate +red +relative +repeat +repeat-x +repeat-y +reset +resize +richness +ridge +right +right-side +rightwards +roman +rosybrown +row +royalblue +rtl +run +run-in +s +s-resize +saddlebrown +salmon +sandybrown +sans-serif +scroll +se +se-resize +seagreen +seashell +semi +semi-condensed +semi-expanded +separate +serif +shadow +show +side +sienna +silent +silever +silver +size +skyblue +slateblue +slategray +slow +slower +small +small-caps +small-caption +smaller +snow +soft +solid +space +spacing +speak +speak-header +speak-numeral +speak-punctuation +specific +specific-voice +speech +speech-rate +spell +spell-out +springgreen +square +static +status +status-bar +steelblue +stress +stretch +style +sub +super +sw +sw-resize +table +table-caption +table-cell +table-column +table-column-group +table-footer-group +table-header-group +table-layout +table-row +table-row-group +tan +teal +text +text-align +text-bottom +text-decoration +text-indent +text-shadow +text-top +text-transform +thick +thin +thistle +through +tomato +top +track +transform +transparent +turquoise +type +ultra +ultra-condensed +ultra-expanded +underline +unicode +unicode-bidi +upper +upper-alpha +upper-latin +upper-roman +uppercase +variant +vertical +vertical-align +violet +visibility +visible +visited +voice +voice-family +volume +w +w-resize +wait +weight +wheat +white +white-space +whitesmoke +wider +widows +width +word +word-spacing +wrap +x +x-fast +x-high +x-large +x-loud +x-low +x-slow +x-small +x-soft +xx +xx-large +xx-small +y +yellow +yellowgreen +z +z-index +zero diff --git a/.emacs.d/ac-dict/java-mode b/.emacs.d/ac-dict/java-mode new file mode 100644 index 0000000..8ed3d04 --- /dev/null +++ b/.emacs.d/ac-dict/java-mode @@ -0,0 +1,50 @@ +abstract +assert +boolean +break +byte +case +catch +char +class +const +continue +default +do +double +else +enum +extends +final +finally +float +for +goto +if +implements +import +instanceof +int +interface +long +native +new +package +private +protected +public +return +short +static +strictfp +super +switch +synchronized +this +throw +throws +transient +try +void +volatile +while diff --git a/.emacs.d/ac-dict/javascript-mode b/.emacs.d/ac-dict/javascript-mode new file mode 100644 index 0000000..3d83f84 --- /dev/null +++ b/.emacs.d/ac-dict/javascript-mode @@ -0,0 +1,148 @@ +Anchor +Area +Array +Boolean +Button +Checkbox +Date +Document +Element +FileUpload +Form +Frame +Function +Hidden +History +Image +Infinity +JavaArray +JavaClass +JavaObject +JavaPackage +Link +Location +Math +MimeType +NaN +Navigator +Number +Object +Option +Packages +Password +Plugin +Radio +RegExp +Reset +Select +String +Submit +Text +Textarea +Window +alert +arguments +assign +blur +break +callee +caller +captureEvents +case +clearInterval +clearTimeout +close +closed +comment +confirm +constructor +continue +default +defaultStatus +delete +do +document +else +escape +eval +export +find +focus +for +frames +function +getClass +history +home +if +import +in +innerHeight +innerWidth +isFinite +isNan +java +label +length +location +locationbar +menubar +moveBy +moveTo +name +navigate +navigator +netscape +new +onBlur +onError +onFocus +onLoad +onUnload +open +opener +outerHeight +outerWidth +pageXoffset +pageYoffset +parent +parseFloat +parseInt +personalbar +print +prompt +prototype +ref +releaseEvents +resizeBy +resizeTo +return +routeEvent +scroll +scrollBy +scrollTo +scrollbars +self +setInterval +setTimeout +status +statusbar +stop +sun +switch +taint +this +toString +toolbar +top +typeof +unescape +untaint +unwatch +valueOf +var +void +watch +while +window +with diff --git a/.emacs.d/ac-dict/php-mode b/.emacs.d/ac-dict/php-mode new file mode 100644 index 0000000..04352d8 --- /dev/null +++ b/.emacs.d/ac-dict/php-mode @@ -0,0 +1,62 @@ +and +array +as +break +case +catch +cfunction +class +clone +const +continue +declare +default +die +do +echo +else +elseif +empty +enddeclare +endfor +endforeach +endif +endswitch +endwhile +eval +exit +extends +final +for +foreach +function +global +goto +if +implements +include +include_once +instanceof +interface +isset +list +namespace +new +old_function +or +print +private +protected +public +require +require_once +return +static +switch +throw +try +unset +use +var +while +xor diff --git a/.emacs.d/ac-dict/python-mode b/.emacs.d/ac-dict/python-mode new file mode 100644 index 0000000..33b4b32 --- /dev/null +++ b/.emacs.d/ac-dict/python-mode @@ -0,0 +1,104 @@ +__import__ +abs +and +any +apply +as +assert +basestring +bin +bool +break +buffer +class +cmp +coerce +complex +continue +def +del +delattr +dict +dir +divmod +elif +else +enumerate +eval +except +exec +execfile +file +filter +finally +float +for +format +from +frozenset +getattr +global +globals +hasattr +hash +help +hex +id +if +import +in +input +int +intern +is +isinstance +issubclass +iter +lambda +len +list +locals +long +map +max +min +next +not +object +oct +open +or +ord +pass +pow +print +print +property +raise +range +raw_input +reduce +reload +repr +return +reversed +round +set +setattr +slice +sorted +staticmethod +str +sum +super +try +tuple +type +unichr +unicode +vars +while +with +xrange +yield +zip diff --git a/.emacs.d/ac-dict/ruby-mode b/.emacs.d/ac-dict/ruby-mode new file mode 100644 index 0000000..90b4fc9 --- /dev/null +++ b/.emacs.d/ac-dict/ruby-mode @@ -0,0 +1,181 @@ +$! +$" +$$ +$& +$' +$* +$+ +$, +$-0 +$-F +$-I +$-K +$-a +$-d +$-i +$-l +$-p +$-v +$-w +$. +$/ +$0 +$1 +$10 +$11 +$2 +$3 +$4 +$5 +$6 +$7 +$8 +$9 +$: +$; +$< +$= +$> +$? +$@ +$DEBUG +$FILENAME +$KCODE +$LOADED_FEATURES +$LOAD_PATH +$PROGRAM_NAME +$SAFE +$VERBOSE +$\ +$_ +$` +$deferr +$defout +$stderr +$stdin +$stdout +$~ +ARGF +ARGV +Array +BEGIN +DATA +END +ENV +FALSE +Float +Integer +NIL +PLATFORM +RELEASE_DATE +RUBY_COPYRIGHT +RUBY_DESCRIPTION +RUBY_PATCHLEVEL +RUBY_PLATFORM +RUBY_RELEASE_DATE +RUBY_VERSION +SCRIPT_LINES__ +STDERR +STDIN +STDOUT +String +TOPLEVEL_BINDING +TRUE +VERSION +__method__ +` +abort +alias +and +at_exit +autoload +autoload? +begin +binding +block_given +break +callcc +caller +case +catch +chomp +chomp! +chop +chop +class +def +defined? +do +else +elsif +end +ensure +eval +exec +exit +exit! +fail +false +for +fork +format +getc +gets +global_variables +gsub +gsub! +if +in +iterator? +lambda +load +local_varaibles +loop +module +next +nil +not +open +or +p +printf +proc +putc +puts +raise +rand +readline +readlines +redo +require +require_relative +rescue +retry +return +scan +select +self +set_trace_func +sleep +split +sprintf +srand +sub +sub! +super +syscall +system +test +then +throw +trace_var +trap +true +undef +unless +until +untrace_var +warn +when +while +yield diff --git a/.emacs.d/ac-dict/scheme-mode b/.emacs.d/ac-dict/scheme-mode new file mode 100644 index 0000000..e5cca61 --- /dev/null +++ b/.emacs.d/ac-dict/scheme-mode @@ -0,0 +1,216 @@ +case-lambda +call/cc +class +define-class +exit-handler +field +import +inherit +init-field +interface +let*-values +let-values +let/ec +mixin +opt-lambda +override +protect +provide +public +rename +require +require-for-syntax +syntax +syntax-case +syntax-error +unit/sig +unless +when +with-syntax +and +begin +call-with-current-continuation +call-with-input-file +call-with-output-file +case +cond +define +define-syntax +delay +do +dynamic-wind +else +for-each +if +lambda +let +let* +let-syntax +letrec +letrec-syntax +map +or +syntax-rules +abs +acos +angle +append +apply +asin +assoc +assq +assv +atan +boolean? +caar +cadr +call-with-input-file +call-with-output-file +call-with-values +car +cdddar +cddddr +cdr +ceiling +char->integer +char-alphabetic? +char-ci<=? +char-ci=? +char-ci>? +char-downcase +char-lower-case? +char-numeric? +char-ready? +char-upcase +char-upper-case? +char-whitespace? +char<=? +char=? +char>? +char? +close-input-port +close-output-port +complex? +cons +cos +current-input-port +current-output-port +denominator +display +eof-object? +eq? +equal? +eqv? +eval +even? +exact->inexact +exact? +exp +expt +#f +floor +force +gcd +imag-part +inexact->exact +inexact? +input-port? +integer->char +integer? +interaction-environment +lcm +length +list +list->string +list->vector +list-ref +list-tail +list? +load +log +magnitude +make-polar +make-rectangular +make-string +make-vector +max +member +memq +memv +min +modulo +negative? +newline +not +null-environment +null? +number->string +number? +numerator +odd? +open-input-file +open-output-file +output-port? +pair? +peek-char +port? +positive? +procedure? +quasiquote +quote +quotient +rational? +rationalize +read +read-char +real-part +real? +remainder +reverse +round +scheme-report-environment +set! +set-car! +set-cdr! +sin +sqrt +string +string->list +string->number +string->symbol +string-append +string-ci<=? +string-ci=? +string-ci>? +string-copy +string-fill! +string-length +string-ref +string-set! +string<=? +string=? +string>? +string? +substring +symbol->string +symbol? +#t +tan +transcript-off +transcript-on +truncate +values +vector +vector->list +vector-fill! +vector-length +vector-ref +vector-set! diff --git a/.emacs.d/ac-dict/tcl-mode b/.emacs.d/ac-dict/tcl-mode new file mode 100644 index 0000000..07a1281 --- /dev/null +++ b/.emacs.d/ac-dict/tcl-mode @@ -0,0 +1,172 @@ +after +append +apply +array +auto_execok +auto_import +auto_load +auto_load_index +auto_mkindex +auto_mkindex_old +auto_qualify +auto_reset +bell +binary +bind +bindtags +break +button +canvas +case +catch +cd +chan +checkbutton +clipboard +clock +close +concat +continue +destroy +dict +encoding +entry +eof +error +eval +event +exec +exit +expr +fblocked +fconfigure +fcopy +file +fileevent +flush +focus +font +for +foreach +format +frame +gets +glob +global +grab +grid +if +image +incr +info +interp +join +label +labelframe +lappend +lassign +lindex +linsert +list +listbox +llength +load +lower +lrange +lrepeat +lreplace +lreverse +lsearch +lset +lsort +menu +menubutton +message +namespace +open +option +pack +package +panedwindow +pid +pkg_mkIndex +place +proc +puts +pwd +radiobutton +raise +read +regexp +registry +regsub +rename +return +scale +scan +scrollbar +seek +selection +set +socket +source +spinbox +split +string +subst +switch +tclLog +tclPkgSetup +tclPkgUnknown +tcl_findLibrary +tell +text +time +tk +tk_chooseColor +tk_chooseDirectory +tk_getOpenFile +tk_getSaveFile +tk_menuSetFocus +tk_messageBox +tk_popup +tk_textCopy +tk_textCut +tk_textPaste +tkwait +toplevel +ttk::button +ttk::checkbutton +ttk::combobox +ttk::entry +ttk::focusFirst +ttk::frame +ttk::label +ttk::labelframe +ttk::menubutton +ttk::notebook +ttk::paned +ttk::panedwindow +ttk::progressbar +ttk::radiobutton +ttk::scale +ttk::scrollbar +ttk::separator +ttk::setTheme +ttk::sizegrip +ttk::style +ttk::takefocus +ttk::themes +ttk::treeview +trace +unknown +unload +unset +update +uplevel +upvar +variable +vwait +while +winfo +wm diff --git a/.emacs.d/auto-complete-config.el b/.emacs.d/auto-complete-config.el new file mode 100644 index 0000000..26ec044 --- /dev/null +++ b/.emacs.d/auto-complete-config.el @@ -0,0 +1,480 @@ +;;; auto-complete-config.el --- auto-complete additional configuations + +;; Copyright (C) 2009, 2010 Tomohiro Matsuyama + +;; Author: Tomohiro Matsuyama +;; Keywords: convenience +;; Version: 1.3 + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; 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 +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; + +;;; Code: + +(eval-when-compile + (require 'cl)) + +(require 'auto-complete) + + + +;;;; Additional sources + +;; imenu + +(defvar ac-imenu-index nil) + +(ac-clear-variable-every-10-minutes 'ac-imenu-index) + +(defun ac-imenu-candidates () + (loop with i = 0 + with stack = (progn + (unless (local-variable-p 'ac-imenu-index) + (make-local-variable 'ac-imenu-index)) + (or ac-imenu-index + (setq ac-imenu-index + (ignore-errors + (with-no-warnings + (imenu--make-index-alist)))))) + with result + while (and stack (or (not (integerp ac-limit)) + (< i ac-limit))) + for node = (pop stack) + if (consp node) + do + (let ((car (car node)) + (cdr (cdr node))) + (if (consp cdr) + (mapc (lambda (child) + (push child stack)) + cdr) + (when (and (stringp car) + (string-match (concat "^" (regexp-quote ac-prefix)) car)) + ;; Remove extra characters + (if (string-match "^.*\\(()\\|=\\|<>\\)$" car) + (setq car (substring car 0 (match-beginning 1)))) + (push car result) + (incf i)))) + finally return (nreverse result))) + +(ac-define-source imenu + '((depends imenu) + (candidates . ac-imenu-candidates) + (symbol . "s"))) + +;; gtags + +(defface ac-gtags-candidate-face + '((t (:background "lightgray" :foreground "navy"))) + "Face for gtags candidate" + :group 'auto-complete) + +(defface ac-gtags-selection-face + '((t (:background "navy" :foreground "white"))) + "Face for the gtags selected candidate." + :group 'auto-complete) + +(defun ac-gtags-candidate () + (ignore-errors + (split-string (shell-command-to-string (format "global -ci %s" ac-prefix)) "\n"))) + +(ac-define-source gtags + '((candidates . ac-gtags-candidate) + (candidate-face . ac-gtags-candidate-face) + (selection-face . ac-gtags-selection-face) + (requires . 3) + (symbol . "s"))) + +;; yasnippet + +(defface ac-yasnippet-candidate-face + '((t (:background "sandybrown" :foreground "black"))) + "Face for yasnippet candidate." + :group 'auto-complete) + +(defface ac-yasnippet-selection-face + '((t (:background "coral3" :foreground "white"))) + "Face for the yasnippet selected candidate." + :group 'auto-complete) + +(defun ac-yasnippet-table-hash (table) + (cond + ((fboundp 'yas/snippet-table-hash) + (yas/snippet-table-hash table)) + ((fboundp 'yas/table-hash) + (yas/table-hash table)))) + +(defun ac-yasnippet-table-parent (table) + (cond + ((fboundp 'yas/snippet-table-parent) + (yas/snippet-table-parent table)) + ((fboundp 'yas/table-parent) + (yas/table-parent table)))) + +(defun ac-yasnippet-candidate-1 (table) + (with-no-warnings + (let ((hashtab (ac-yasnippet-table-hash table)) + (parent (ac-yasnippet-table-parent table)) + candidates) + (maphash (lambda (key value) + (push key candidates)) + hashtab) + (setq candidates (all-completions ac-prefix (nreverse candidates))) + (if parent + (setq candidates + (append candidates (ac-yasnippet-candidate-1 parent)))) + candidates))) + +(defun ac-yasnippet-candidates () + (with-no-warnings + (if (fboundp 'yas/get-snippet-tables) + ;; >0.6.0 + (apply 'append (mapcar 'ac-yasnippet-candidate-1 (yas/get-snippet-tables major-mode))) + (let ((table + (if (fboundp 'yas/snippet-table) + ;; <0.6.0 + (yas/snippet-table major-mode) + ;; 0.6.0 + (yas/current-snippet-table)))) + (if table + (ac-yasnippet-candidate-1 table)))))) + +(ac-define-source yasnippet + '((depends yasnippet) + (candidates . ac-yasnippet-candidates) + (action . yas/expand) + (candidate-face . ac-yasnippet-candidate-face) + (selection-face . ac-yasnippet-selection-face) + (symbol . "a"))) + +;; semantic + +(defun ac-semantic-candidates (prefix) + (with-no-warnings + (delete "" ; semantic sometimes returns an empty string + (mapcar 'semantic-tag-name + (ignore-errors + (or (semantic-analyze-possible-completions + (semantic-analyze-current-context)) + (senator-find-tag-for-completion prefix))))))) + +(ac-define-source semantic + '((available . (or (require 'semantic-ia nil t) + (require 'semantic/ia nil t))) + (candidates . (ac-semantic-candidates ac-prefix)) + (prefix . c-dot-ref) + (requires . 0) + (symbol . "m"))) + +(ac-define-source semantic-raw + '((available . (or (require 'semantic-ia nil t) + (require 'semantic/ia nil t))) + (candidates . (ac-semantic-candidates ac-prefix)) + (symbol . "s"))) + +;; eclim + +(defun ac-eclim-candidates () + (with-no-warnings + (loop for c in (eclim/java-complete) + collect (nth 1 c)))) + +(ac-define-source eclim + '((candidates . ac-eclim-candidates) + (prefix . c-dot) + (requires . 0) + (symbol . "f"))) + +;; css + +;; Copied from company-css.el +(defconst ac-css-property-alist + ;; see http://www.w3.org/TR/CSS21/propidx.html + '(("azimuth" angle "left-side" "far-left" "left" "center-left" "center" + "center-right" "right" "far-right" "right-side" "behind" "leftwards" + "rightwards") + ("background" background-color background-image background-repeat + background-attachment background-position) + ("background-attachment" "scroll" "fixed") + ("background-color" color "transparent") + ("background-image" uri "none") + ("background-position" percentage length "left" "center" "right" percentage + length "top" "center" "bottom" "left" "center" "right" "top" "center" + "bottom") + ("background-repeat" "repeat" "repeat-x" "repeat-y" "no-repeat") + ("border" border-width border-style border-color) + ("border-bottom" border) + ("border-bottom-color" border-color) + ("border-bottom-style" border-style) + ("border-bottom-width" border-width) + ("border-collapse" "collapse" "separate") + ("border-color" color "transparent") + ("border-left" border) + ("border-left-color" border-color) + ("border-left-style" border-style) + ("border-left-width" border-width) + ("border-right" border) + ("border-right-color" border-color) + ("border-right-style" border-style) + ("border-right-width" border-width) + ("border-spacing" length length) + ("border-style" border-style) + ("border-top" border) + ("border-top-color" border-color) + ("border-top-style" border-style) + ("border-top-width" border-width) + ("border-width" border-width) + ("bottom" length percentage "auto") + ("caption-side" "top" "bottom") + ("clear" "none" "left" "right" "both") + ("clip" shape "auto") + ("color" color) + ("content" "normal" "none" string uri counter "attr()" "open-quote" + "close-quote" "no-open-quote" "no-close-quote") + ("counter-increment" identifier integer "none") + ("counter-reset" identifier integer "none") + ("cue" cue-before cue-after) + ("cue-after" uri "none") + ("cue-before" uri "none") + ("cursor" uri "*" "auto" "crosshair" "default" "pointer" "move" "e-resize" + "ne-resize" "nw-resize" "n-resize" "se-resize" "sw-resize" "s-resize" + "w-resize" "text" "wait" "help" "progress") + ("direction" "ltr" "rtl") + ("display" "inline" "block" "list-item" "run-in" "inline-block" "table" + "inline-table" "table-row-group" "table-header-group" "table-footer-group" + "table-row" "table-column-group" "table-column" "table-cell" + "table-caption" "none") + ("elevation" angle "below" "level" "above" "higher" "lower") + ("empty-cells" "show" "hide") + ("float" "left" "right" "none") + ("font" font-style font-variant font-weight font-size "/" line-height + font-family "caption" "icon" "menu" "message-box" "small-caption" + "status-bar") + ("font-family" family-name generic-family) + ("font-size" absolute-size relative-size length percentage) + ("font-style" "normal" "italic" "oblique") + ("font-variant" "normal" "small-caps") + ("font-weight" "normal" "bold" "bolder" "lighter" "100" "200" "300" "400" + "500" "600" "700" "800" "900") + ("height" length percentage "auto") + ("left" length percentage "auto") + ("letter-spacing" "normal" length) + ("line-height" "normal" number length percentage) + ("list-style" list-style-type list-style-position list-style-image) + ("list-style-image" uri "none") + ("list-style-position" "inside" "outside") + ("list-style-type" "disc" "circle" "square" "decimal" "decimal-leading-zero" + "lower-roman" "upper-roman" "lower-greek" "lower-latin" "upper-latin" + "armenian" "georgian" "lower-alpha" "upper-alpha" "none") + ("margin" margin-width) + ("margin-bottom" margin-width) + ("margin-left" margin-width) + ("margin-right" margin-width) + ("margin-top" margin-width) + ("max-height" length percentage "none") + ("max-width" length percentage "none") + ("min-height" length percentage) + ("min-width" length percentage) + ("orphans" integer) + ("outline" outline-color outline-style outline-width) + ("outline-color" color "invert") + ("outline-style" border-style) + ("outline-width" border-width) + ("overflow" "visible" "hidden" "scroll" "auto") + ("padding" padding-width) + ("padding-bottom" padding-width) + ("padding-left" padding-width) + ("padding-right" padding-width) + ("padding-top" padding-width) + ("page-break-after" "auto" "always" "avoid" "left" "right") + ("page-break-before" "auto" "always" "avoid" "left" "right") + ("page-break-inside" "avoid" "auto") + ("pause" time percentage) + ("pause-after" time percentage) + ("pause-before" time percentage) + ("pitch" frequency "x-low" "low" "medium" "high" "x-high") + ("pitch-range" number) + ("play-during" uri "mix" "repeat" "auto" "none") + ("position" "static" "relative" "absolute" "fixed") + ("quotes" string string "none") + ("richness" number) + ("right" length percentage "auto") + ("speak" "normal" "none" "spell-out") + ("speak-header" "once" "always") + ("speak-numeral" "digits" "continuous") + ("speak-punctuation" "code" "none") + ("speech-rate" number "x-slow" "slow" "medium" "fast" "x-fast" "faster" + "slower") + ("stress" number) + ("table-layout" "auto" "fixed") + ("text-align" "left" "right" "center" "justify") + ("text-decoration" "none" "underline" "overline" "line-through" "blink") + ("text-indent" length percentage) + ("text-transform" "capitalize" "uppercase" "lowercase" "none") + ("top" length percentage "auto") + ("unicode-bidi" "normal" "embed" "bidi-override") + ("vertical-align" "baseline" "sub" "super" "top" "text-top" "middle" + "bottom" "text-bottom" percentage length) + ("visibility" "visible" "hidden" "collapse") + ("voice-family" specific-voice generic-voice "*" specific-voice + generic-voice) + ("volume" number percentage "silent" "x-soft" "soft" "medium" "loud" + "x-loud") + ("white-space" "normal" "pre" "nowrap" "pre-wrap" "pre-line") + ("widows" integer) + ("width" length percentage "auto") + ("word-spacing" "normal" length) + ("z-index" "auto" integer)) + "A list of CSS properties and their possible values.") + +(defconst ac-css-value-classes + '((absolute-size "xx-small" "x-small" "small" "medium" "large" "x-large" + "xx-large") + (border-style "none" "hidden" "dotted" "dashed" "solid" "double" "groove" + "ridge" "inset" "outset") + (color "aqua" "black" "blue" "fuchsia" "gray" "green" "lime" "maroon" "navy" + "olive" "orange" "purple" "red" "silver" "teal" "white" "yellow" + "rgb") + (counter "counter") + (family-name "Courier" "Helvetica" "Times") + (generic-family "serif" "sans-serif" "cursive" "fantasy" "monospace") + (generic-voice "male" "female" "child") + (margin-width "auto") ;; length percentage + (relative-size "larger" "smaller") + (shape "rect") + (uri "url")) + "A list of CSS property value classes and their contents.") + +(defconst ac-css-pseudo-classes + '("active" "after" "before" "first" "first-child" "first-letter" "first-line" + "focus" "hover" "lang" "left" "link" "right" "visited") + "Identifiers for CSS pseudo-elements and pseudo-classes.") + +(defvar ac-css-property nil + "Current editing property.") + +(defun ac-css-prefix () + (when (save-excursion (re-search-backward "\\_<\\(.+?\\)\\_>\\s *:.*\\=" nil t)) + (setq ac-css-property (match-string 1)) + (or (ac-prefix-symbol) (point)))) + +(defun ac-css-property-candidates () + (or (loop with list = (assoc-default ac-css-property ac-css-property-alist) + with value + while (setq value (pop list)) + if (symbolp value) + do (setq list + (append list + (or (assoc-default value ac-css-value-classes) + (assoc-default (symbol-name value) ac-css-property-alist)))) + else collect value) + ac-css-pseudo-classes)) + +(defvar ac-source-css-property + '((candidates . ac-css-property-candidates) + (prefix . ac-css-prefix) + (requires . 0))) + + + +;;;; Not maintained sources + +;; ropemacs + +(defvar ac-ropemacs-loaded nil) +(defun ac-ropemacs-require () + (with-no-warnings + (unless ac-ropemacs-loaded + (pymacs-load "ropemacs" "rope-") + (if (boundp 'ropemacs-enable-autoimport) + (setq ropemacs-enable-autoimport t)) + (setq ac-ropemacs-loaded t)))) + +(defun ac-ropemacs-setup () + (ac-ropemacs-require) + ;(setq ac-sources (append (list 'ac-source-ropemacs) ac-sources)) + (setq ac-omni-completion-sources '(("\\." ac-source-ropemacs)))) + +(defun ac-ropemacs-initialize () + (autoload 'pymacs-apply "pymacs") + (autoload 'pymacs-call "pymacs") + (autoload 'pymacs-eval "pymacs" nil t) + (autoload 'pymacs-exec "pymacs" nil t) + (autoload 'pymacs-load "pymacs" nil t) + (add-hook 'python-mode-hook 'ac-ropemacs-setup) + t) + +(defvar ac-ropemacs-completions-cache nil) +(defvar ac-source-ropemacs + '((init + . (lambda () + (setq ac-ropemacs-completions-cache + (mapcar + (lambda (completion) + (concat ac-prefix completion)) + (ignore-errors + (rope-completions)))))) + (candidates . ac-ropemacs-completions-cache))) + +;; rcodetools + +(defvar ac-source-rcodetools + '((init . (lambda () + (require 'rcodetools) + (condition-case x + (save-excursion + (rct-exec-and-eval rct-complete-command-name "--completion-emacs-icicles")) + (error) (setq rct-method-completion-table nil)))) + (candidates . (lambda () + (all-completions + ac-prefix + (mapcar + (lambda (completion) + (replace-regexp-in-string "\t.*$" "" (car completion))) + rct-method-completion-table)))))) + + + +;;;; Default settings + +(defun ac-common-setup () + (add-to-list 'ac-sources 'ac-source-filename)) + +(defun ac-emacs-lisp-mode-setup () + (setq ac-sources (append '(ac-source-features ac-source-functions ac-source-yasnippet ac-source-variables ac-source-symbols) ac-sources))) + +(defun ac-cc-mode-setup () + (setq ac-sources (append '(ac-source-yasnippet ac-source-gtags) ac-sources))) + +(defun ac-ruby-mode-setup () + (make-local-variable 'ac-ignores) + (add-to-list 'ac-ignores "end")) + +(defun ac-css-mode-setup () + (setq ac-sources (append '(ac-source-css-property) ac-sources))) + +(defun ac-config-default () + (setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers)) + (add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup) + (add-hook 'c-mode-common-hook 'ac-cc-mode-setup) + (add-hook 'ruby-mode-hook 'ac-ruby-mode-setup) + (add-hook 'css-mode-hook 'ac-css-mode-setup) + (add-hook 'auto-complete-mode-hook 'ac-common-setup) + (global-auto-complete-mode t)) + +(provide 'auto-complete-config) +;;; auto-complete-config.el ends here diff --git a/.emacs.d/auto-complete-config.elc b/.emacs.d/auto-complete-config.elc new file mode 100644 index 0000000000000000000000000000000000000000..2761c498165eacf75a0ac78126db624e89d8aff6 GIT binary patch literal 15943 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 literal 0 HcmV?d00001 diff --git a/.emacs.d/auto-complete.el b/.emacs.d/auto-complete.el new file mode 100644 index 0000000..2472dc7 --- /dev/null +++ b/.emacs.d/auto-complete.el @@ -0,0 +1,1897 @@ +;;; auto-complete.el --- Auto Completion for GNU Emacs + +;; Copyright (C) 2008, 2009, 2010 Tomohiro Matsuyama + +;; Author: Tomohiro Matsuyama +;; URL: http://cx4a.org/software/auto-complete +;; Keywords: completion, convenience +;; Version: 1.3 + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; 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 +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; +;; This extension provides a way to complete with popup menu like: +;; +;; def-!- +;; +-----------------+ +;; |defun::::::::::::| +;; |defvar | +;; |defmacro | +;; | ... | +;; +-----------------+ +;; +;; You can complete by typing and selecting menu. +;; +;; Entire documents are located in doc/ directory. +;; Take a look for information. +;; +;; Enjoy! + +;;; Code: + + + +(eval-when-compile + (require 'cl)) + +(require 'popup) + +;;;; Global stuff + +(defun ac-error (&optional var) + "Report an error and disable `auto-complete-mode'." + (ignore-errors + (message "auto-complete error: %s" var) + (auto-complete-mode -1) + var)) + + + +;;;; Customization + +(defgroup auto-complete nil + "Auto completion." + :group 'completion + :prefix "ac-") + +(defcustom ac-delay 0.1 + "Delay to completions will be available." + :type 'float + :group 'auto-complete) + +(defcustom ac-auto-show-menu 0.8 + "Non-nil means completion menu will be automatically shown." + :type '(choice (const :tag "Yes" t) + (const :tag "Never" nil) + (float :tag "Timer")) + :group 'auto-complete) + +(defcustom ac-show-menu-immediately-on-auto-complete t + "Non-nil means menu will be showed immediately on `auto-complete'." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-expand-on-auto-complete t + "Non-nil means expand whole common part on first time `auto-complete'." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-disable-faces '(font-lock-comment-face font-lock-string-face font-lock-doc-face) + "Non-nil means disable automatic completion on specified faces." + :type '(repeat symbol) + :group 'auto-complete) + +(defcustom ac-stop-flymake-on-completing t + "Non-nil means disble flymake temporarily on completing." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-use-fuzzy t + "Non-nil means use fuzzy matching." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-fuzzy-cursor-color "red" + "Cursor color in fuzzy mode." + :type 'string + :group 'auto-complete) + +(defcustom ac-use-comphist t + "Non-nil means use intelligent completion history." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-comphist-threshold 0.7 + "Percentage of ignoring low scored candidates." + :type 'float + :group 'auto-complete) + +(defcustom ac-comphist-file + (expand-file-name (concat (if (boundp 'user-emacs-directory) + user-emacs-directory + "~/.emacs.d/") + "/ac-comphist.dat")) + "Completion history file name." + :type 'string + :group 'auto-complete) + +(defcustom ac-use-quick-help t + "Non-nil means use quick help." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-quick-help-delay 1.5 + "Delay to show quick help." + :type 'float + :group 'auto-complete) + +(defcustom ac-menu-height 10 + "Max height of candidate menu." + :type 'integer + :group 'auto-complete) +(defvaralias 'ac-candidate-menu-height 'ac-menu-height) + +(defcustom ac-quick-help-height 20 + "Max height of quick help." + :type 'integer + :group 'auto-complete) + +(defcustom ac-quick-help-prefer-x t + "Prefer X tooltip than overlay popup for displaying quick help." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-candidate-limit nil + "Limit number of candidates. Non-integer means no limit." + :type 'integer + :group 'auto-complete) +(defvaralias 'ac-candidate-max 'ac-candidate-limit) + +(defcustom ac-modes + '(emacs-lisp-mode + lisp-interaction-mode + c-mode cc-mode c++-mode + java-mode clojure-mode scala-mode + scheme-mode + ocaml-mode tuareg-mode + perl-mode cperl-mode python-mode ruby-mode + ecmascript-mode javascript-mode js-mode js2-mode php-mode css-mode + makefile-mode sh-mode fortran-mode f90-mode ada-mode + xml-mode sgml-mode) + "Major modes `auto-complete-mode' can run on." + :type '(repeat symbol) + :group 'auto-complete) + +(defcustom ac-compatible-packages-regexp + "^ac-" + "Regexp to indicate what packages can work with auto-complete." + :type 'string + :group 'auto-complete) + +(defcustom ac-trigger-commands + '(self-insert-command) + "Trigger commands that specify whether `auto-complete' should start or not." + :type '(repeat symbol) + :group 'auto-complete) + +(defcustom ac-trigger-commands-on-completing + '(delete-backward-char + backward-delete-char + backward-delete-char-untabify) + "Trigger commands that specify whether `auto-complete' should continue or not." + :type '(repeat symbol) + :group 'auto-complete) + +(defcustom ac-trigger-key nil + "Non-nil means `auto-complete' will start by typing this key. +If you specify this TAB, for example, `auto-complete' will start by typing TAB, +and if there is no completions, an original command will be fallbacked." + :type 'string + :group 'auto-complete + :set (lambda (symbol value) + (set-default symbol value) + (when (and value + (fboundp 'ac-set-trigger-key)) + (ac-set-trigger-key value)))) + +(defcustom ac-auto-start 2 + "Non-nil means completion will be started automatically. +Positive integer means if a length of a word you entered is larger than the value, +completion will be started automatically. +If you specify `nil', never be started automatically." + :type '(choice (const :tag "Yes" t) + (const :tag "Never" nil) + (integer :tag "Require")) + :group 'auto-complete) + +(defcustom ac-ignores nil + "List of string to ignore completion." + :type '(repeat string) + :group 'auto-complete) + +(defcustom ac-ignore-case 'smart + "Non-nil means auto-complete ignores case. +If this value is `smart', auto-complete ignores case only when +a prefix doen't contain any upper case letters." + :type '(choice (const :tag "Yes" t) + (const :tag "Smart" smart) + (const :tag "No" nil)) + :group 'auto-complete) + +(defcustom ac-dwim t + "Non-nil means `auto-complete' works based on Do What I Mean." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-use-menu-map nil + "Non-nil means a special keymap `ac-menu-map' on completing menu will be used." + :type 'boolean + :group 'auto-complete) + +(defcustom ac-use-overriding-local-map nil + "Non-nil means `overriding-local-map' will be used to hack for overriding key events on auto-copletion." + :type 'boolean + :group 'auto-complete) + +(defface ac-completion-face + '((t (:foreground "darkgray" :underline t))) + "Face for inline completion" + :group 'auto-complete) + +(defface ac-candidate-face + '((t (:background "lightgray" :foreground "black"))) + "Face for candidate." + :group 'auto-complete) + +(defface ac-selection-face + '((t (:background "steelblue" :foreground "white"))) + "Face for selected candidate." + :group 'auto-complete) + +(defvar auto-complete-mode-hook nil + "Hook for `auto-complete-mode'.") + + + +;;;; Internal variables + +(defvar auto-complete-mode nil + "Dummy variable to suppress compiler warnings.") + +(defvar ac-cursor-color nil + "Old cursor color.") + +(defvar ac-inline nil + "Inline completion instance.") + +(defvar ac-menu nil + "Menu instance.") + +(defvar ac-show-menu nil + "Flag to show menu on timer tick.") + +(defvar ac-last-completion nil + "Cons of prefix marker and selected item of last completion.") + +(defvar ac-quick-help nil + "Quick help instance") + +(defvar ac-completing nil + "Non-nil means `auto-complete-mode' is now working on completion.") + +(defvar ac-buffer nil + "Buffer where auto-complete is started.") + +(defvar ac-point nil + "Start point of prefix.") + +(defvar ac-last-point nil + "Last point of updating pattern.") + +(defvar ac-prefix nil + "Prefix string.") +(defvaralias 'ac-target 'ac-prefix) + +(defvar ac-selected-candidate nil + "Last selected candidate.") + +(defvar ac-common-part nil + "Common part string of meaningful candidates. +If there is no common part, this will be nil.") + +(defvar ac-whole-common-part nil + "Common part string of whole candidates. +If there is no common part, this will be nil.") + +(defvar ac-prefix-overlay nil + "Overlay for prefix string.") + +(defvar ac-timer nil + "Completion idle timer.") + +(defvar ac-show-menu-timer nil + "Show menu idle timer.") + +(defvar ac-quick-help-timer nil + "Quick help idle timer.") + +(defvar ac-triggered nil + "Flag to update.") + +(defvar ac-limit nil + "Limit number of candidates for each sources.") + +(defvar ac-candidates nil + "Current candidates.") + +(defvar ac-candidates-cache nil + "Candidates cache for individual sources.") + +(defvar ac-fuzzy-enable nil + "Non-nil means fuzzy matching is enabled.") + +(defvar ac-dwim-enable nil + "Non-nil means DWIM completion will be allowed.") + +(defvar ac-mode-map (make-sparse-keymap) + "Auto-complete mode map. It is also used for trigger key command. See also `ac-trigger-key'.") + +(defvar ac-completing-map + (let ((map (make-sparse-keymap))) + (define-key map "\t" 'ac-expand) + (define-key map "\r" 'ac-complete) + (define-key map (kbd "M-TAB") 'auto-complete) + (define-key map "\C-s" 'ac-isearch) + + (define-key map "\M-n" 'ac-next) + (define-key map "\M-p" 'ac-previous) + (define-key map [down] 'ac-next) + (define-key map [up] 'ac-previous) + + (define-key map [f1] 'ac-help) + (define-key map [M-f1] 'ac-persist-help) + (define-key map (kbd "C-?") 'ac-help) + (define-key map (kbd "C-M-?") 'ac-persist-help) + + (define-key map [C-down] 'ac-quick-help-scroll-down) + (define-key map [C-up] 'ac-quick-help-scroll-up) + (define-key map "\C-\M-n" 'ac-quick-help-scroll-down) + (define-key map "\C-\M-p" 'ac-quick-help-scroll-up) + + (dotimes (i 9) + (let ((symbol (intern (format "ac-complete-%d" (1+ i))))) + (fset symbol + `(lambda () + (interactive) + (when (and (ac-menu-live-p) (popup-select ac-menu ,i)) + (ac-complete)))) + (define-key map (read-kbd-macro (format "M-%s" (1+ i))) symbol))) + + map) + "Keymap for completion.") +(defvaralias 'ac-complete-mode-map 'ac-completing-map) + +(defvar ac-menu-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-n" 'ac-next) + (define-key map "\C-p" 'ac-previous) + (set-keymap-parent map ac-completing-map) + map) + "Keymap for completion on completing menu.") + +(defvar ac-current-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map ac-completing-map) + map)) + +(defvar ac-match-function 'all-completions + "Default match function.") + +(defvar ac-prefix-definitions + '((symbol . ac-prefix-symbol) + (file . ac-prefix-file) + (valid-file . ac-prefix-valid-file) + (c-dot . ac-prefix-c-dot) + (c-dot-ref . ac-prefix-c-dot-ref)) + "Prefix definitions for common use.") + +(defvar ac-sources '(ac-source-words-in-same-mode-buffers) + "Sources for completion.") +(make-variable-buffer-local 'ac-sources) + +(defvar ac-compiled-sources nil + "Compiled source of `ac-sources'.") + +(defvar ac-current-sources nil + "Current working sources. This is sublist of `ac-compiled-sources'.") + +(defvar ac-omni-completion-sources nil + "Do not use this anymore.") + +(defvar ac-current-prefix-def nil) + +(defvar ac-ignoring-prefix-def nil) + + + +;;;; Intelligent completion history + +(defvar ac-comphist nil + "Database of completion history.") + +(defsubst ac-comphist-make-tab () + (make-hash-table :test 'equal)) + +(defsubst ac-comphist-tab (db) + (nth 0 db)) + +(defsubst ac-comphist-cache (db) + (nth 1 db)) + +(defun ac-comphist-make (&optional tab) + (list (or tab (ac-comphist-make-tab)) (make-hash-table :test 'equal :weakness t))) + +(defun ac-comphist-get (db string &optional create) + (let* ((tab (ac-comphist-tab db)) + (index (gethash string tab))) + (when (and create (null index)) + (setq index (make-vector (length string) 0)) + (puthash string index tab)) + index)) + +(defun ac-comphist-add (db string prefix) + (setq prefix (min prefix (1- (length string)))) + (when (<= 0 prefix) + (setq string (substring-no-properties string)) + (let ((stat (ac-comphist-get db string t))) + (incf (aref stat prefix)) + (remhash string (ac-comphist-cache db))))) + +(defun ac-comphist-score (db string prefix) + (setq prefix (min prefix (1- (length string)))) + (if (<= 0 prefix) + (let ((cache (gethash string (ac-comphist-cache db)))) + (or (and cache (aref cache prefix)) + (let ((stat (ac-comphist-get db string)) + (score 0.0)) + (when stat + (loop for p from 0 below (length string) + ;; sigmoid function + with a = 5 + with d = (/ 6.0 a) + for x = (- d (abs (- prefix p))) + for r = (/ 1.0 (1+ (exp (* (- a) x)))) + do + (incf score (* (aref stat p) r)))) + ;; Weight by distance + (incf score (max 0.0 (- 0.3 (/ (- (length string) prefix) 100.0)))) + (unless cache + (setq cache (make-vector (length string) nil)) + (puthash string cache (ac-comphist-cache db))) + (aset cache prefix score) + score))) + 0.0)) + +(defun ac-comphist-sort (db collection prefix &optional threshold) + (let (result + (n 0) + (total 0) + (cur 0)) + (setq result (mapcar (lambda (a) + (when (and cur threshold) + (if (>= cur (* total threshold)) + (setq cur nil) + (incf n) + (incf cur (cdr a)))) + (car a)) + (sort (mapcar (lambda (string) + (let ((score (ac-comphist-score db string prefix))) + (incf total score) + (cons string score))) + collection) + (lambda (a b) (< (cdr b) (cdr a)))))) + (if threshold + (cons n result) + result))) + +(defun ac-comphist-serialize (db) + (let (alist) + (maphash (lambda (k v) + (push (cons k v) alist)) + (ac-comphist-tab db)) + (list alist))) + +(defun ac-comphist-deserialize (sexp) + (condition-case nil + (ac-comphist-make (let ((tab (ac-comphist-make-tab))) + (mapc (lambda (cons) + (puthash (car cons) (cdr cons) tab)) + (nth 0 sexp)) + tab)) + (error (message "Invalid comphist db.") nil))) + +(defun ac-comphist-init () + (ac-comphist-load) + (add-hook 'kill-emacs-hook 'ac-comphist-save)) + +(defun ac-comphist-load () + (interactive) + (let ((db (if (file-exists-p ac-comphist-file) + (ignore-errors + (with-temp-buffer + (insert-file-contents ac-comphist-file) + (goto-char (point-min)) + (ac-comphist-deserialize (read (current-buffer)))))))) + (setq ac-comphist (or db (ac-comphist-make))))) + +(defun ac-comphist-save () + (interactive) + (require 'pp) + (ignore-errors + (with-temp-buffer + (pp (ac-comphist-serialize ac-comphist) (current-buffer)) + (write-region (point-min) (point-max) ac-comphist-file)))) + + + +;;;; Auto completion internals + +(defun ac-menu-at-wrapper-line-p () + "Return non-nil if current line is long and wrapped to next visual line." + (and (not truncate-lines) + (eq (line-beginning-position) + (save-excursion + (vertical-motion 1) + (line-beginning-position))))) + +(defun ac-prefix-symbol () + "Default prefix definition function." + (require 'thingatpt) + (car-safe (bounds-of-thing-at-point 'symbol))) +(defalias 'ac-prefix-default 'ac-prefix-symbol) + +(defun ac-prefix-file () + "File prefix." + (let ((point (re-search-backward "[\"<>' \t\r\n]" nil t))) + (if point (1+ point)))) + +(defun ac-prefix-valid-file () + "Existed (or to be existed) file prefix." + (let* ((line-beg (line-beginning-position)) + (end (point)) + (start (or (let ((point (re-search-backward "[\"<>'= \t\r\n]" line-beg t))) + (if point (1+ point))) + line-beg)) + (file (buffer-substring start end))) + (if (and file (or (string-match "^/" file) + (and (setq file (and (string-match "^[^/]*/" file) + (match-string 0 file))) + (file-directory-p file)))) + start))) + +(defun ac-prefix-c-dot () + "C-like languages dot(.) prefix." + (if (re-search-backward "\\.\\(\\(?:[a-zA-Z0-9][_a-zA-Z0-9]*\\)?\\)\\=" nil t) + (match-beginning 1))) + +(defun ac-prefix-c-dot-ref () + "C-like languages dot(.) and reference(->) prefix." + (if (re-search-backward "\\(?:\\.\\|->\\)\\(\\(?:[a-zA-Z0-9][_a-zA-Z0-9]*\\)?\\)\\=" nil t) + (match-beginning 1))) + +(defun ac-define-prefix (name prefix) + "Define new prefix definition. +You can not use it in source definition like (prefix . `NAME')." + (push (cons name prefix) ac-prefix-definitions)) + +(defun ac-match-substring (prefix candidates) + (loop with regexp = (regexp-quote prefix) + for candidate in candidates + if (string-match regexp candidate) + collect candidate)) + +(defsubst ac-source-entity (source) + (if (symbolp source) + (symbol-value source) + source)) + +(defun ac-source-available-p (source) + (if (and (symbolp source) + (get source 'available)) + (eq (get source 'available) t) + (let* ((src (ac-source-entity source)) + (avail-pair (assq 'available src)) + (avail-cond (cdr avail-pair)) + (available (and (if avail-pair + (cond + ((symbolp avail-cond) + (funcall avail-cond)) + ((listp avail-cond) + (eval avail-cond))) + t) + (loop for feature in (assoc-default 'depends src) + unless (require feature nil t) return nil + finally return t)))) + (if (symbolp source) + (put source 'available (if available t 'no))) + available))) + +(defun ac-compile-sources (sources) + "Compiled `SOURCES' into expanded sources style." + (loop for source in sources + if (ac-source-available-p source) + do + (setq source (ac-source-entity source)) + (flet ((add-attribute (name value &optional append) (add-to-list 'source (cons name value) append))) + ;; prefix + (let* ((prefix (assoc 'prefix source)) + (real (assoc-default (cdr prefix) ac-prefix-definitions))) + (cond + (real + (add-attribute 'prefix real)) + ((null prefix) + (add-attribute 'prefix 'ac-prefix-default)))) + ;; match + (let ((match (assq 'match source))) + (cond + ((eq (cdr match) 'substring) + (setcdr match 'ac-match-substring))))) + and collect source)) + +(defun ac-compiled-sources () + (or ac-compiled-sources + (setq ac-compiled-sources + (ac-compile-sources ac-sources)))) + +(defsubst ac-menu-live-p () + (popup-live-p ac-menu)) + +(defun ac-menu-create (point width height) + (setq ac-menu + (popup-create point width height + :around t + :face 'ac-candidate-face + :selection-face 'ac-selection-face + :symbol t + :scroll-bar t + :margin-left 1))) + +(defun ac-menu-delete () + (when ac-menu + (popup-delete ac-menu) + (setq ac-menu))) + +(defsubst ac-inline-marker () + (nth 0 ac-inline)) + +(defsubst ac-inline-overlay () + (nth 1 ac-inline)) + +(defsubst ac-inline-live-p () + (and ac-inline (ac-inline-overlay) t)) + +(defun ac-inline-show (point string) + (unless ac-inline + (setq ac-inline (list (make-marker) nil))) + (save-excursion + (let ((overlay (ac-inline-overlay)) + (width 0) + (string-width (string-width string)) + (length 0) + (original-string string)) + ;; Calculate string space to show completion + (goto-char point) + (let (c) + (while (and (not (eolp)) + (< width string-width) + (setq c (char-after)) + (not (eq c ?\t))) ; special case for tab + (incf width (char-width c)) + (incf length) + (forward-char))) + + ;; Show completion + (goto-char point) + (cond + ((= width 0) + (set-marker (ac-inline-marker) point) + (let ((buffer-undo-list t)) + (insert " ")) + (setq width 1 + length 1)) + ((<= width string-width) + ;; No space to show + ;; Do nothing + ) + ((> width string-width) + ;; Need to fill space + (setq string (concat string (make-string (- width string-width) ? ))))) + (setq string (propertize string 'face 'ac-completion-face)) + (if overlay + (progn + (move-overlay overlay point (+ point length)) + (overlay-put overlay 'invisible nil)) + (setq overlay (make-overlay point (+ point length))) + (setf (nth 1 ac-inline) overlay) + (overlay-put overlay 'priority 9999) + ;; Help prefix-overlay in some cases + (overlay-put overlay 'keymap ac-current-map)) + (overlay-put overlay 'display (substring string 0 1)) + ;; TODO no width but char + (overlay-put overlay 'after-string (substring string 1)) + (overlay-put overlay 'string original-string)))) + +(defun ac-inline-delete () + (when (ac-inline-live-p) + (ac-inline-hide) + (delete-overlay (ac-inline-overlay)) + (setq ac-inline nil))) + +(defun ac-inline-hide () + (when (ac-inline-live-p) + (let ((overlay (ac-inline-overlay)) + (marker (ac-inline-marker)) + (buffer-undo-list t)) + (when overlay + (when (marker-position marker) + (save-excursion + (goto-char marker) + (delete-char 1) + (set-marker marker nil))) + (move-overlay overlay (point-min) (point-min)) + (overlay-put overlay 'invisible t) + (overlay-put overlay 'display nil) + (overlay-put overlay 'after-string nil))))) + +(defun ac-inline-update () + (if (and ac-completing ac-prefix (stringp ac-common-part)) + (let ((common-part-length (length ac-common-part)) + (prefix-length (length ac-prefix))) + (if (> common-part-length prefix-length) + (progn + (ac-inline-hide) + (ac-inline-show (point) (substring ac-common-part prefix-length))) + (ac-inline-delete))) + (ac-inline-delete))) + +(defun ac-put-prefix-overlay () + (unless ac-prefix-overlay + (let (newline) + ;; Insert newline to make sure that cursor always on the overlay + (when (and (eq ac-point (point-max)) + (eq ac-point (point))) + (popup-save-buffer-state + (insert "\n")) + (setq newline t)) + (setq ac-prefix-overlay (make-overlay ac-point (1+ (point)) nil t t)) + (overlay-put ac-prefix-overlay 'priority 9999) + (overlay-put ac-prefix-overlay 'keymap (make-sparse-keymap)) + (overlay-put ac-prefix-overlay 'newline newline)))) + +(defun ac-remove-prefix-overlay () + (when ac-prefix-overlay + (when (overlay-get ac-prefix-overlay 'newline) + ;; Remove inserted newline + (popup-save-buffer-state + (goto-char (point-max)) + (if (eq (char-before) ?\n) + (delete-char -1)))) + (delete-overlay ac-prefix-overlay))) + +(defun ac-activate-completing-map () + (if (and ac-show-menu ac-use-menu-map) + (set-keymap-parent ac-current-map ac-menu-map)) + (when (and ac-use-overriding-local-map + (null overriding-terminal-local-map)) + (setq overriding-terminal-local-map ac-current-map)) + (when ac-prefix-overlay + (set-keymap-parent (overlay-get ac-prefix-overlay 'keymap) ac-current-map))) + +(defun ac-deactivate-completing-map () + (set-keymap-parent ac-current-map ac-completing-map) + (when (and ac-use-overriding-local-map + (eq overriding-terminal-local-map ac-current-map)) + (setq overriding-terminal-local-map nil)) + (when ac-prefix-overlay + (set-keymap-parent (overlay-get ac-prefix-overlay 'keymap) nil))) + +(defsubst ac-selected-candidate () + (if ac-menu + (popup-selected-item ac-menu))) + +(defun ac-prefix (requires ignore-list) + (loop with current = (point) + with point + with prefix-def + with sources + for source in (ac-compiled-sources) + for prefix = (assoc-default 'prefix source) + for req = (or (assoc-default 'requires source) requires 1) + + if (null prefix-def) + do + (unless (member prefix ignore-list) + (save-excursion + (setq point (cond + ((symbolp prefix) + (funcall prefix)) + ((stringp prefix) + (and (re-search-backward (concat prefix "\\=") nil t) + (or (match-beginning 1) (match-beginning 0)))) + ((stringp (car-safe prefix)) + (let ((regexp (nth 0 prefix)) + (end (nth 1 prefix)) + (group (nth 2 prefix))) + (and (re-search-backward (concat regexp "\\=") nil t) + (funcall (if end 'match-end 'match-beginning) + (or group 0))))) + (t + (eval prefix)))) + (if (and point + (integerp req) + (< (- current point) req)) + (setq point nil)) + (if point + (setq prefix-def prefix)))) + + if (equal prefix prefix-def) do (push source sources) + + finally return + (and point (list prefix-def point (nreverse sources))))) + +(defun ac-init () + "Initialize current sources to start completion." + (setq ac-candidates-cache nil) + (loop for source in ac-current-sources + for function = (assoc-default 'init source) + if function do + (save-excursion + (cond + ((functionp function) + (funcall function)) + (t + (eval function)))))) + +(defun ac-candidates-1 (source) + (let* ((do-cache (assq 'cache source)) + (function (assoc-default 'candidates source)) + (action (assoc-default 'action source)) + (document (assoc-default 'document source)) + (symbol (assoc-default 'symbol source)) + (ac-limit (or (assoc-default 'limit source) ac-limit)) + (face (or (assoc-default 'face source) (assoc-default 'candidate-face source))) + (selection-face (assoc-default 'selection-face source)) + (cache (and do-cache (assq source ac-candidates-cache))) + (candidates (cdr cache))) + (unless cache + (setq candidates (save-excursion + (cond + ((functionp function) + (funcall function)) + (t + (eval function))))) + ;; Convert (name value) format candidates into name with text properties. + (setq candidates (mapcar (lambda (candidate) + (if (consp candidate) + (propertize (car candidate) 'value (cdr candidate)) + candidate)) + candidates)) + (when do-cache + (push (cons source candidates) ac-candidates-cache))) + (setq candidates (funcall (or (assoc-default 'match source) + ac-match-function) + ac-prefix candidates)) + ;; Remove extra items regarding to ac-limit + (if (and (integerp ac-limit) (> ac-limit 1) (> (length candidates) ac-limit)) + (setcdr (nthcdr (1- ac-limit) candidates) nil)) + ;; Put candidate properties + (setq candidates (mapcar (lambda (candidate) + (popup-item-propertize candidate + 'action action + 'symbol symbol + 'document document + 'popup-face face + 'selection-face selection-face)) + candidates)) + candidates)) + +(defun ac-candidates () + "Produce candidates for current sources." + (loop with completion-ignore-case = (or (eq ac-ignore-case t) + (and (eq ac-ignore-case 'smart) + (let ((case-fold-search nil)) (not (string-match "[[:upper:]]" ac-prefix))))) + with case-fold-search = completion-ignore-case + with prefix-len = (length ac-prefix) + for source in ac-current-sources + append (ac-candidates-1 source) into candidates + finally return + (progn + (delete-dups candidates) + (if (and ac-use-comphist ac-comphist) + (if ac-show-menu + (let* ((pair (ac-comphist-sort ac-comphist candidates prefix-len ac-comphist-threshold)) + (n (car pair)) + (result (cdr pair)) + (cons (if (> n 0) (nthcdr (1- n) result))) + (cdr (cdr cons))) + (if cons (setcdr cons nil)) + (setq ac-common-part (try-completion ac-prefix result)) + (setq ac-whole-common-part (try-completion ac-prefix candidates)) + (if cons (setcdr cons cdr)) + result) + (setq candidates (ac-comphist-sort ac-comphist candidates prefix-len)) + (setq ac-common-part (if candidates (popup-x-to-string (car candidates)))) + (setq ac-whole-common-part (try-completion ac-prefix candidates)) + candidates) + (setq ac-common-part (try-completion ac-prefix candidates)) + (setq ac-whole-common-part ac-common-part) + candidates)))) + +(defun ac-update-candidates (cursor scroll-top) + "Update candidates of menu to `ac-candidates' and redraw it." + (setf (popup-cursor ac-menu) cursor + (popup-scroll-top ac-menu) scroll-top) + (setq ac-dwim-enable (= (length ac-candidates) 1)) + (if ac-candidates + (progn + (setq ac-completing t) + (ac-activate-completing-map)) + (setq ac-completing nil) + (ac-deactivate-completing-map)) + (ac-inline-update) + (popup-set-list ac-menu ac-candidates) + (if (and (not ac-fuzzy-enable) + (<= (length ac-candidates) 1)) + (popup-hide ac-menu) + (if ac-show-menu + (popup-draw ac-menu)))) + +(defun ac-reposition () + "Force to redraw candidate menu with current `ac-candidates'." + (let ((cursor (popup-cursor ac-menu)) + (scroll-top (popup-scroll-top ac-menu))) + (ac-menu-delete) + (ac-menu-create ac-point (popup-preferred-width ac-candidates) (popup-height ac-menu)) + (ac-update-candidates cursor scroll-top))) + +(defun ac-cleanup () + "Cleanup auto completion." + (if ac-cursor-color + (set-cursor-color ac-cursor-color)) + (when (and ac-use-comphist ac-comphist) + (when (and (null ac-selected-candidate) + (member ac-prefix ac-candidates)) + ;; Assume candidate is selected by just typing + (setq ac-selected-candidate ac-prefix) + (setq ac-last-point ac-point)) + (when ac-selected-candidate + (ac-comphist-add ac-comphist + ac-selected-candidate + (if ac-last-point + (- ac-last-point ac-point) + (length ac-prefix))))) + (ac-deactivate-completing-map) + (ac-remove-prefix-overlay) + (ac-remove-quick-help) + (ac-inline-delete) + (ac-menu-delete) + (ac-cancel-timer) + (ac-cancel-show-menu-timer) + (ac-cancel-quick-help-timer) + (setq ac-cursor-color nil + ac-inline nil + ac-show-menu nil + ac-menu nil + ac-completing nil + ac-point nil + ac-last-point nil + ac-prefix nil + ac-prefix-overlay nil + ac-selected-candidate nil + ac-common-part nil + ac-whole-common-part nil + ac-triggered nil + ac-limit nil + ac-candidates nil + ac-candidates-cache nil + ac-fuzzy-enable nil + ac-dwim-enable nil + ac-compiled-sources nil + ac-current-sources nil + ac-current-prefix-def nil + ac-ignoring-prefix-def nil)) + +(defsubst ac-abort () + "Abort completion." + (ac-cleanup)) + +(defun ac-expand-string (string &optional remove-undo-boundary) + "Expand `STRING' into the buffer and update `ac-prefix' to `STRING'. +This function records deletion and insertion sequences by `undo-boundary'. +If `remove-undo-boundary' is non-nil, this function also removes `undo-boundary' +that have been made before in this function." + (when (not (equal string (buffer-substring ac-point (point)))) + (undo-boundary) + ;; We can't use primitive-undo since it undoes by + ;; groups, divided by boundaries. + ;; We don't want boundary between deletion and insertion. + ;; So do it manually. + ;; Delete region silently for undo: + (if remove-undo-boundary + (progn + (let (buffer-undo-list) + (save-excursion + (delete-region ac-point (point)))) + (setq buffer-undo-list + (nthcdr 2 buffer-undo-list))) + (delete-region ac-point (point))) + (insert string) + ;; Sometimes, possible when omni-completion used, (insert) added + ;; to buffer-undo-list strange record about position changes. + ;; Delete it here: + (when (and remove-undo-boundary + (integerp (cadr buffer-undo-list))) + (setcdr buffer-undo-list (nthcdr 2 buffer-undo-list))) + (undo-boundary) + (setq ac-selected-candidate string) + (setq ac-prefix string))) + +(defun ac-set-trigger-key (key) + "Set `ac-trigger-key' to `KEY'. It is recommemded to use this function instead of calling `setq'." + ;; Remove old mapping + (when ac-trigger-key + (define-key ac-mode-map (read-kbd-macro ac-trigger-key) nil)) + + ;; Make new mapping + (setq ac-trigger-key key) + (when key + (define-key ac-mode-map (read-kbd-macro key) 'ac-trigger-key-command))) + +(defun ac-set-timer () + (unless ac-timer + (setq ac-timer (run-with-idle-timer ac-delay ac-delay 'ac-update-greedy)))) + +(defun ac-cancel-timer () + (when (timerp ac-timer) + (cancel-timer ac-timer) + (setq ac-timer nil))) + +(defun ac-update (&optional force) + (when (and auto-complete-mode + ac-prefix + (or ac-triggered + force) + (not isearch-mode)) + (ac-put-prefix-overlay) + (setq ac-candidates (ac-candidates)) + (let ((preferred-width (popup-preferred-width ac-candidates))) + ;; Reposition if needed + (when (or (null ac-menu) + (>= (popup-width ac-menu) preferred-width) + (<= (popup-width ac-menu) (- preferred-width 10)) + (and (> (popup-direction ac-menu) 0) + (ac-menu-at-wrapper-line-p))) + (ac-inline-hide) ; Hide overlay to calculate correct column + (ac-menu-delete) + (ac-menu-create ac-point preferred-width ac-menu-height))) + (ac-update-candidates 0 0) + t)) + +(defun ac-update-greedy (&optional force) + (let (result) + (while (when (and (setq result (ac-update force)) + (null ac-candidates)) + (add-to-list 'ac-ignoring-prefix-def ac-current-prefix-def) + (ac-start :force-init t) + ac-current-prefix-def)) + result)) + +(defun ac-set-show-menu-timer () + (when (and (or (integerp ac-auto-show-menu) (floatp ac-auto-show-menu)) + (null ac-show-menu-timer)) + (setq ac-show-menu-timer (run-with-idle-timer ac-auto-show-menu ac-auto-show-menu 'ac-show-menu)))) + +(defun ac-cancel-show-menu-timer () + (when (timerp ac-show-menu-timer) + (cancel-timer ac-show-menu-timer) + (setq ac-show-menu-timer nil))) + +(defun ac-show-menu () + (when (not (eq ac-show-menu t)) + (setq ac-show-menu t) + (ac-inline-hide) + (ac-remove-quick-help) + (ac-update t))) + +(defun ac-help (&optional persist) + (interactive "P") + (when ac-menu + (popup-menu-show-help ac-menu persist))) + +(defun ac-persist-help () + (interactive) + (ac-help t)) + +(defun ac-last-help (&optional persist) + (interactive "P") + (when ac-last-completion + (popup-item-show-help (cdr ac-last-completion) persist))) + +(defun ac-last-persist-help () + (interactive) + (ac-last-help t)) + +(defun ac-set-quick-help-timer () + (when (and ac-use-quick-help + (null ac-quick-help-timer)) + (setq ac-quick-help-timer (run-with-idle-timer ac-quick-help-delay ac-quick-help-delay 'ac-quick-help)))) + +(defun ac-cancel-quick-help-timer () + (when (timerp ac-quick-help-timer) + (cancel-timer ac-quick-help-timer) + (setq ac-quick-help-timer nil))) + +(defun ac-pos-tip-show-quick-help (menu &optional item &rest args) + (let* ((point (plist-get args :point)) + (around nil) + (parent-offset (popup-offset menu)) + (doc (popup-menu-documentation menu item))) + (when (stringp doc) + (if (popup-hidden-p menu) + (setq around t) + (setq point nil)) + (with-no-warnings + (pos-tip-show doc + 'popup-tip-face + (or point + (and menu + (popup-child-point menu parent-offset)) + (point)) + nil 0 + popup-tip-max-width + nil nil + (and (not around) 0)) + (unless (plist-get args :nowait) + (clear-this-command-keys) + (unwind-protect + (push (read-event (plist-get args :prompt)) unread-command-events) + (pos-tip-hide)) + t))))) + +(defun ac-quick-help (&optional force) + (interactive) + (when (and (or force (null this-command)) + (ac-menu-live-p) + (null ac-quick-help)) + (setq ac-quick-help + (funcall (if (and ac-quick-help-prefer-x + (eq window-system 'x) + (featurep 'pos-tip)) + 'ac-pos-tip-show-quick-help + 'popup-menu-show-quick-help) + ac-menu nil + :point ac-point + :height ac-quick-help-height + :nowait t)))) + +(defun ac-remove-quick-help () + (when ac-quick-help + (popup-delete ac-quick-help) + (setq ac-quick-help nil))) + +(defun ac-last-quick-help () + (interactive) + (when (and ac-last-completion + (eq (marker-buffer (car ac-last-completion)) + (current-buffer))) + (let ((doc (popup-item-documentation (cdr ac-last-completion))) + (point (marker-position (car ac-last-completion)))) + (when (stringp doc) + (if (and ac-quick-help-prefer-x + (eq window-system 'x) + (featurep 'pos-tip)) + (with-no-warnings (pos-tip-show doc nil point nil 0)) + (popup-tip doc + :point point + :around t + :scroll-bar t + :margin t)))))) + +(defmacro ac-define-quick-help-command (name arglist &rest body) + (declare (indent 2)) + `(progn + (defun ,name ,arglist ,@body) + (put ',name 'ac-quick-help-command t))) + +(ac-define-quick-help-command ac-quick-help-scroll-down () + (interactive) + (when ac-quick-help + (popup-scroll-down ac-quick-help))) + +(ac-define-quick-help-command ac-quick-help-scroll-up () + (interactive) + (when ac-quick-help + (popup-scroll-up ac-quick-help))) + + + +;;;; Auto completion isearch + +(defun ac-isearch-callback (list) + (setq ac-dwim-enable (eq (length list) 1))) + +(defun ac-isearch () + (interactive) + (when (ac-menu-live-p) + (ac-cancel-show-menu-timer) + (ac-cancel-quick-help-timer) + (ac-show-menu) + (popup-isearch ac-menu :callback 'ac-isearch-callback))) + + + +;;;; Auto completion commands + +(defun auto-complete (&optional sources) + "Start auto-completion at current point." + (interactive) + (let ((menu-live (ac-menu-live-p)) + (inline-live (ac-inline-live-p))) + (ac-abort) + (let ((ac-sources (or sources ac-sources))) + (if (or ac-show-menu-immediately-on-auto-complete + inline-live) + (setq ac-show-menu t)) + (ac-start)) + (when (ac-update-greedy t) + ;; TODO Not to cause inline completion to be disrupted. + (if (ac-inline-live-p) + (ac-inline-hide)) + ;; Not to expand when it is first time to complete + (when (and (or (and (not ac-expand-on-auto-complete) + (> (length ac-candidates) 1) + (not menu-live)) + (not (let ((ac-common-part ac-whole-common-part)) + (ac-expand-common)))) + ac-use-fuzzy + (null ac-candidates)) + (ac-fuzzy-complete))))) + +(defun ac-fuzzy-complete () + "Start fuzzy completion at current point." + (interactive) + (when (require 'fuzzy nil) + (unless (ac-menu-live-p) + (ac-start)) + (let ((ac-match-function 'fuzzy-all-completions)) + (unless ac-cursor-color + (setq ac-cursor-color (frame-parameter (selected-frame) 'cursor-color))) + (if ac-fuzzy-cursor-color + (set-cursor-color ac-fuzzy-cursor-color)) + (setq ac-show-menu t) + (setq ac-fuzzy-enable t) + (setq ac-triggered nil) + (ac-update t))) + t) + +(defun ac-next () + "Select next candidate." + (interactive) + (when (ac-menu-live-p) + (popup-next ac-menu) + (setq ac-show-menu t) + (if (eq this-command 'ac-next) + (setq ac-dwim-enable t)))) + +(defun ac-previous () + "Select previous candidate." + (interactive) + (when (ac-menu-live-p) + (popup-previous ac-menu) + (setq ac-show-menu t) + (if (eq this-command 'ac-previous) + (setq ac-dwim-enable t)))) + +(defun ac-expand () + "Try expand, and if expanded twice, select next candidate." + (interactive) + (unless (ac-expand-common) + (let ((string (ac-selected-candidate))) + (when string + (when (equal ac-prefix string) + (ac-next) + (setq string (ac-selected-candidate))) + (ac-expand-string string (eq last-command this-command)) + ;; Do reposition if menu at long line + (if (and (> (popup-direction ac-menu) 0) + (ac-menu-at-wrapper-line-p)) + (ac-reposition)) + (setq ac-show-menu t) + string)))) + +(defun ac-expand-common () + "Try to expand meaningful common part." + (interactive) + (if (and ac-dwim ac-dwim-enable) + (ac-complete) + (when (and (ac-inline-live-p) + ac-common-part) + (ac-inline-hide) + (ac-expand-string ac-common-part (eq last-command this-command)) + (setq ac-common-part nil) + t))) + +(defun ac-complete () + "Try complete." + (interactive) + (let* ((candidate (ac-selected-candidate)) + (action (popup-item-property candidate 'action)) + (fallback nil)) + (when candidate + (unless (ac-expand-string candidate) + (setq fallback t)) + ;; Remember to show help later + (when (and ac-point candidate) + (unless ac-last-completion + (setq ac-last-completion (cons (make-marker) nil))) + (set-marker (car ac-last-completion) ac-point ac-buffer) + (setcdr ac-last-completion candidate))) + (ac-abort) + (cond + (action + (funcall action)) + (fallback + (ac-fallback-command))) + candidate)) + +(defun* ac-start (&key + requires + force-init) + "Start completion." + (interactive) + (if (not auto-complete-mode) + (message "auto-complete-mode is not enabled") + (let* ((info (ac-prefix requires ac-ignoring-prefix-def)) + (prefix-def (nth 0 info)) + (point (nth 1 info)) + (sources (nth 2 info)) + prefix + (init (or force-init (not (eq ac-point point))))) + (if (or (null point) + (member (setq prefix (buffer-substring-no-properties point (point))) + ac-ignores)) + (prog1 nil + (ac-abort)) + (unless ac-cursor-color + (setq ac-cursor-color (frame-parameter (selected-frame) 'cursor-color))) + (setq ac-show-menu (or ac-show-menu (if (eq ac-auto-show-menu t) t)) + ac-current-sources sources + ac-buffer (current-buffer) + ac-point point + ac-prefix prefix + ac-limit ac-candidate-limit + ac-triggered t + ac-current-prefix-def prefix-def) + (when (or init (null ac-prefix-overlay)) + (ac-init)) + (ac-set-timer) + (ac-set-show-menu-timer) + (ac-set-quick-help-timer) + (ac-put-prefix-overlay))))) + +(defun ac-stop () + "Stop completiong." + (interactive) + (setq ac-selected-candidate nil) + (ac-abort)) + +(defun ac-trigger-key-command (&optional force) + (interactive "P") + (if (or force (ac-trigger-command-p last-command)) + (auto-complete) + (ac-fallback-command 'ac-trigger-key-command))) + + + +;;;; Basic cache facility + +(defvar ac-clear-variables-every-minute-timer nil) +(defvar ac-clear-variables-after-save nil) +(defvar ac-clear-variables-every-minute nil) +(defvar ac-minutes-counter 0) + +(defun ac-clear-variable-after-save (variable &optional pred) + (add-to-list 'ac-clear-variables-after-save (cons variable pred))) + +(defun ac-clear-variables-after-save () + (dolist (pair ac-clear-variables-after-save) + (if (or (null (cdr pair)) + (funcall (cdr pair))) + (set (car pair) nil)))) + +(defun ac-clear-variable-every-minutes (variable minutes) + (add-to-list 'ac-clear-variables-every-minute (cons variable minutes))) + +(defun ac-clear-variable-every-minute (variable) + (ac-clear-variable-every-minutes variable 1)) + +(defun ac-clear-variable-every-10-minutes (variable) + (ac-clear-variable-every-minutes variable 10)) + +(defun ac-clear-variables-every-minute () + (incf ac-minutes-counter) + (dolist (pair ac-clear-variables-every-minute) + (if (eq (% ac-minutes-counter (cdr pair)) 0) + (set (car pair) nil)))) + + + +;;;; Auto complete mode + +(defun ac-cursor-on-diable-face-p (&optional point) + (memq (get-text-property (or point (point)) 'face) ac-disable-faces)) + +(defun ac-trigger-command-p (command) + "Return non-nil if `COMMAND' is a trigger command." + (and (symbolp command) + (or (memq command ac-trigger-commands) + (string-match "self-insert-command" (symbol-name command)) + (string-match "electric" (symbol-name command))))) + +(defun ac-fallback-command (&optional except-command) + (let* ((auto-complete-mode nil) + (keys (this-command-keys-vector)) + (command (if keys (key-binding keys)))) + (when (and (commandp command) + (not (eq command except-command))) + (setq this-command command) + (call-interactively command)))) + +(defun ac-compatible-package-command-p (command) + "Return non-nil if `COMMAND' is compatible with auto-complete." + (and (symbolp command) + (string-match ac-compatible-packages-regexp (symbol-name command)))) + +(defun ac-handle-pre-command () + (condition-case var + (if (or (setq ac-triggered (and (not ac-fuzzy-enable) ; ignore key storkes in fuzzy mode + (or (eq this-command 'auto-complete) ; special case + (ac-trigger-command-p this-command) + (and ac-completing + (memq this-command ac-trigger-commands-on-completing))) + (not (ac-cursor-on-diable-face-p)))) + (ac-compatible-package-command-p this-command)) + (progn + (if (or (not (symbolp this-command)) + (not (get this-command 'ac-quick-help-command))) + (ac-remove-quick-help)) + ;; Not to cause inline completion to be disrupted. + (ac-inline-hide)) + (ac-abort)) + (error (ac-error var)))) + +(defun ac-handle-post-command () + (condition-case var + (when (and ac-triggered + (or ac-auto-start + ac-completing) + (not isearch-mode)) + (setq ac-last-point (point)) + (ac-start :requires (unless ac-completing ac-auto-start)) + (ac-inline-update)) + (error (ac-error var)))) + +(defun ac-setup () + (if ac-trigger-key + (ac-set-trigger-key ac-trigger-key)) + (if ac-use-comphist + (ac-comphist-init)) + (unless ac-clear-variables-every-minute-timer + (setq ac-clear-variables-every-minute-timer (run-with-timer 60 60 'ac-clear-variables-every-minute))) + (if ac-stop-flymake-on-completing + (defadvice flymake-on-timer-event (around ac-flymake-stop-advice activate) + (unless ac-completing + ad-do-it)) + (ad-disable-advice 'flymake-on-timer-event 'around 'ac-flymake-stop-advice))) + +(define-minor-mode auto-complete-mode + "AutoComplete mode" + :lighter " AC" + :keymap ac-mode-map + :group 'auto-complete + (if auto-complete-mode + (progn + (ac-setup) + (add-hook 'pre-command-hook 'ac-handle-pre-command nil t) + (add-hook 'post-command-hook 'ac-handle-post-command nil t) + (add-hook 'after-save-hook 'ac-clear-variables-after-save nil t) + (run-hooks 'auto-complete-mode-hook)) + (remove-hook 'pre-command-hook 'ac-handle-pre-command t) + (remove-hook 'post-command-hook 'ac-handle-post-command t) + (remove-hook 'after-save-hook 'ac-clear-variables-after-save t) + (ac-abort))) + +(defun auto-complete-mode-maybe () + "What buffer `auto-complete-mode' prefers." + (if (and (not (minibufferp (current-buffer))) + (memq major-mode ac-modes)) + (auto-complete-mode 1))) + +(define-global-minor-mode global-auto-complete-mode + auto-complete-mode auto-complete-mode-maybe + :group 'auto-complete) + + + +;;;; Compatibilities with other extensions + +(defun ac-flyspell-workaround () + "Flyspell uses `sit-for' for delaying its process. Unfortunatelly, +it stops auto completion which is trigger with `run-with-idle-timer'. +This workaround avoid flyspell processes when auto completion is being started." + (interactive) + (defadvice flyspell-post-command-hook (around ac-flyspell-workaround activate) + (unless ac-triggered + ad-do-it))) + + + +;;;; Standard sources + +(defmacro ac-define-source (name source) + "Source definition macro. It defines a complete command also." + (declare (indent 1)) + `(progn + (defvar ,(intern (format "ac-source-%s" name)) + ,source) + (defun ,(intern (format "ac-complete-%s" name)) () + (interactive) + (auto-complete '(,(intern (format "ac-source-%s" name))))))) + +;; Words in buffer source +(defvar ac-word-index nil) + +(defun ac-candidate-words-in-buffer (point prefix limit) + (let ((i 0) + candidate + candidates + (regexp (concat "\\_<" (regexp-quote prefix) "\\(\\sw\\|\\s_\\)+\\_>"))) + (save-excursion + ;; Search backward + (goto-char point) + (while (and (or (not (integerp limit)) (< i limit)) + (re-search-backward regexp nil t)) + (setq candidate (match-string-no-properties 0)) + (unless (member candidate candidates) + (push candidate candidates) + (incf i))) + ;; Search backward + (goto-char (+ point (length prefix))) + (while (and (or (not (integerp limit)) (< i limit)) + (re-search-forward regexp nil t)) + (setq candidate (match-string-no-properties 0)) + (unless (member candidate candidates) + (push candidate candidates) + (incf i))) + (nreverse candidates)))) + +(defun ac-incremental-update-word-index () + (unless (local-variable-p 'ac-word-index) + (make-local-variable 'ac-word-index)) + (if (null ac-word-index) + (setq ac-word-index (cons nil nil))) + ;; Mark incomplete + (if (car ac-word-index) + (setcar ac-word-index nil)) + (let ((index (cdr ac-word-index)) + (words (ac-candidate-words-in-buffer ac-point ac-prefix (or (and (integerp ac-limit) ac-limit) 10)))) + (dolist (word words) + (unless (member word index) + (push word index) + (setcdr ac-word-index index))))) + +(defun ac-update-word-index-1 () + (unless (local-variable-p 'ac-word-index) + (make-local-variable 'ac-word-index)) + (when (and (not (car ac-word-index)) + (< (buffer-size) 1048576)) + ;; Complete index + (setq ac-word-index + (cons t + (split-string (buffer-substring-no-properties (point-min) (point-max)) + "\\(?:^\\|\\_>\\).*?\\(?:\\_<\\|$\\)"))))) + +(defun ac-update-word-index () + (dolist (buffer (buffer-list)) + (when (or ac-fuzzy-enable + (not (eq buffer (current-buffer)))) + (with-current-buffer buffer + (ac-update-word-index-1))))) + +(defun ac-word-candidates (&optional buffer-pred) + (loop initially (unless ac-fuzzy-enable (ac-incremental-update-word-index)) + for buffer in (buffer-list) + if (and (or (not (integerp ac-limit)) (< (length candidates) ac-limit)) + (if buffer-pred (funcall buffer-pred buffer) t)) + append (funcall ac-match-function + ac-prefix + (and (local-variable-p 'ac-word-index buffer) + (cdr (buffer-local-value 'ac-word-index buffer)))) + into candidates + finally return candidates)) + +(ac-define-source words-in-buffer + '((candidates . ac-word-candidates))) + +(ac-define-source words-in-all-buffer + '((init . ac-update-word-index) + (candidates . ac-word-candidates))) + +(ac-define-source words-in-same-mode-buffers + '((init . ac-update-word-index) + (candidates . (ac-word-candidates + (lambda (buffer) + (derived-mode-p (buffer-local-value 'major-mode buffer))))))) + +;; Lisp symbols source +(defvar ac-symbols-cache nil) +(ac-clear-variable-every-10-minutes 'ac-symbols-cache) + +(defun ac-symbol-file (symbol type) + (if (fboundp 'find-lisp-object-file-name) + (find-lisp-object-file-name symbol type) + (let ((file-name (with-no-warnings + (describe-simplify-lib-file-name + (symbol-file symbol type))))) + (when (equal file-name "loaddefs.el") + ;; Find the real def site of the preloaded object. + (let ((location (condition-case nil + (if (eq type 'defun) + (find-function-search-for-symbol symbol nil + "loaddefs.el") + (find-variable-noselect symbol file-name)) + (error nil)))) + (when location + (with-current-buffer (car location) + (when (cdr location) + (goto-char (cdr location))) + (when (re-search-backward + "^;;; Generated autoloads from \\(.*\\)" nil t) + (setq file-name (match-string 1))))))) + (if (and (null file-name) + (or (eq type 'defun) + (integerp (get symbol 'variable-documentation)))) + ;; It's a object not defined in Elisp but in C. + (if (get-buffer " *DOC*") + (if (eq type 'defun) + (help-C-file-name (symbol-function symbol) 'subr) + (help-C-file-name symbol 'var)) + 'C-source) + file-name)))) + +(defun ac-symbol-documentation (symbol) + (if (stringp symbol) + (setq symbol (intern-soft symbol))) + (ignore-errors + (with-temp-buffer + (let ((standard-output (current-buffer))) + (prin1 symbol) + (princ " is ") + (cond + ((fboundp symbol) + (let ((help-xref-following t)) + (describe-function-1 symbol)) + (buffer-string)) + ((boundp symbol) + (let ((file-name (ac-symbol-file symbol 'defvar))) + (princ "a variable") + (when file-name + (princ " defined in `") + (princ (if (eq file-name 'C-source) + "C source code" + (file-name-nondirectory file-name)))) + (princ "'.\n\n") + (princ (or (documentation-property symbol 'variable-documentation t) + "Not documented.")) + (buffer-string))) + ((facep symbol) + (let ((file-name (ac-symbol-file symbol 'defface))) + (princ "a face") + (when file-name + (princ " defined in `") + (princ (if (eq file-name 'C-source) + "C source code" + (file-name-nondirectory file-name)))) + (princ "'.\n\n") + (princ (or (documentation-property symbol 'face-documentation t) + "Not documented.")) + (buffer-string))) + (t + (let ((doc (documentation-property symbol 'group-documentation t))) + (when doc + (princ "a group.\n\n") + (princ doc) + (buffer-string))))))))) + +(defun ac-symbol-candidates () + (or ac-symbols-cache + (setq ac-symbols-cache + (loop for x being the symbols + if (or (fboundp x) + (boundp x) + (symbol-plist x)) + collect (symbol-name x))))) + +(ac-define-source symbols + '((candidates . ac-symbol-candidates) + (document . ac-symbol-documentation) + (symbol . "s") + (cache))) + +;; Lisp functions source +(defvar ac-functions-cache nil) +(ac-clear-variable-every-10-minutes 'ac-functions-cache) + +(defun ac-function-candidates () + (or ac-functions-cache + (setq ac-functions-cache + (loop for x being the symbols + if (fboundp x) + collect (symbol-name x))))) + +(ac-define-source functions + '((candidates . ac-function-candidates) + (document . ac-symbol-documentation) + (symbol . "f") + (prefix . "(\\(\\(?:\\sw\\|\\s_\\)+\\)") + (cache))) + +;; Lisp variables source +(defvar ac-variables-cache nil) +(ac-clear-variable-every-10-minutes 'ac-variables-cache) + +(defun ac-variable-candidates () + (or ac-variables-cache + (setq ac-variables-cache + (loop for x being the symbols + if (boundp x) + collect (symbol-name x))))) + +(ac-define-source variables + '((candidates . ac-variable-candidates) + (document . ac-symbol-documentation) + (symbol . "v") + (cache))) + +;; Lisp features source +(defvar ac-emacs-lisp-features nil) +(ac-clear-variable-every-10-minutes 'ac-emacs-lisp-features) + +(defun ac-emacs-lisp-feature-candidates () + (or ac-emacs-lisp-features + (if (fboundp 'find-library-suffixes) + (let ((suffix (concat (regexp-opt (find-library-suffixes) t) "\\'"))) + (setq ac-emacs-lisp-features + (append (mapcar 'prin1-to-string features) + (loop for dir in load-path + if (file-directory-p dir) + append (loop for file in (directory-files dir) + if (string-match suffix file) + collect (substring file 0 (match-beginning 0)))))))))) + +(ac-define-source features + '((depends find-func) + (candidates . ac-emacs-lisp-feature-candidates) + (prefix . "require +'\\(\\(?:\\sw\\|\\s_\\)*\\)") + (requires . 0))) + +(defvaralias 'ac-source-emacs-lisp-features 'ac-source-features) + +;; Abbrev source +(ac-define-source abbrev + '((candidates . (mapcar 'popup-x-to-string (append (vconcat local-abbrev-table global-abbrev-table) nil))) + (action . expand-abbrev) + (symbol . "a") + (cache))) + +;; Files in current directory source +(ac-define-source files-in-current-dir + '((candidates . (directory-files default-directory)) + (cache))) + +;; Filename source +(defvar ac-filename-cache nil) + +(defun ac-filename-candidate () + (unless (file-regular-p ac-prefix) + (ignore-errors + (loop with dir = (file-name-directory ac-prefix) + with files = (or (assoc-default dir ac-filename-cache) + (let ((files (directory-files dir nil "^[^.]"))) + (push (cons dir files) ac-filename-cache) + files)) + for file in files + for path = (concat dir file) + collect (if (file-directory-p path) + (concat path "/") + path))))) + +(ac-define-source filename + '((init . (setq ac-filename-cache nil)) + (candidates . ac-filename-candidate) + (prefix . valid-file) + (requires . 0) + (action . ac-start) + (limit . nil))) + +;; Dictionary source +(defcustom ac-user-dictionary nil + "User dictionary" + :type '(repeat string) + :group 'auto-complete) + +(defcustom ac-user-dictionary-files '("~/.dict") + "User dictionary files." + :type '(repeat string) + :group 'auto-complete) + +(defcustom ac-dictionary-directories nil + "Dictionary directories." + :type '(repeat string) + :group 'auto-complete) + +(defvar ac-dictionary nil) +(defvar ac-dictionary-cache (make-hash-table :test 'equal)) + +(defun ac-clear-dictionary-cache () + (interactive) + (clrhash ac-dictionary-cache)) + +(defun ac-read-file-dictionary (filename) + (let ((cache (gethash filename ac-dictionary-cache 'none))) + (if (and cache (not (eq cache 'none))) + cache + (let (result) + (ignore-errors + (with-temp-buffer + (insert-file-contents filename) + (setq result (split-string (buffer-string) "\n")))) + (puthash filename result ac-dictionary-cache) + result)))) + +(defun ac-buffer-dictionary () + (apply 'append + (mapcar 'ac-read-file-dictionary + (mapcar (lambda (name) + (loop for dir in ac-dictionary-directories + for file = (concat dir "/" name) + if (file-exists-p file) + return file)) + (list (symbol-name major-mode) + (ignore-errors + (file-name-extension (buffer-file-name)))))))) + +(defun ac-dictionary-candidates () + (apply 'append `(,ac-user-dictionary + ,(ac-buffer-dictionary) + ,@(mapcar 'ac-read-file-dictionary + ac-user-dictionary-files)))) + +(ac-define-source dictionary + '((candidates . ac-dictionary-candidates) + (symbol . "d"))) + +(provide 'auto-complete) +;;; auto-complete.el ends here diff --git a/.emacs.d/auto-complete.elc b/.emacs.d/auto-complete.elc new file mode 100644 index 0000000000000000000000000000000000000000..4b0e44d59881f6e568d1f8b4c1f7c525ceeb8f8c GIT binary patch literal 59995 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 ZZ%M1>G#98@gJ-zb4IJD*4PoQb{{>Daat;6h literal 0 HcmV?d00001 diff --git a/.emacs.d/batch-mode.el b/.emacs.d/batch-mode.el new file mode 100644 index 0000000..dcc156a --- /dev/null +++ b/.emacs.d/batch-mode.el @@ -0,0 +1,156 @@ +;;; batch-mode.el --- major mode for editing ESRI batch scrips +;;; Copyright (C) 2002, Agnar Renolen +;;; Modified (c) 2009, Matthew Fidler +;;; Fixed indents (and labels) + +;; batch-mode.el is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2 of the License, or +;; (at your option) any later version. + +;; 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 +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; if not, write to the Free Software +;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +;; This is version 1.0 of 21 August 2002. + +;;; Comentary: + +;; The batch-mode provides syntax hilighting and auto-indentation for +;; DOS batch files (.bat). and auto-idendation. + +;; Agnar Renolen, + +;;; Code: + +(defgroup batch nil + "Major mode for editing batch code" + :prefix "batch-" + :group 'languages) + +; (defvar batch-mode-hook nil +; "Hooks called when batch mode fires up." +; :type 'hook +; :group 'batch) + +(defvar batch-mode-map nil + "Keymap used with batch code") + +(defcustom batch-indent-level 4 + "Amount by which batch subexpressions are indented." + :type 'integer + :group 'batch) + +(defvar batch-font-lock-keywords + (eval-when-compile + (list + ; since we can't specify batch comments through the syntax table, + ; we have to specify it here, and override whatever is highlighted + '( "^[ \t]*rem\\>.*" (0 font-lock-comment-face t)) + + ; since the argument to the echo command is a string, we format it + ; as a string + '( "\\[ \t]*\\(.*\\)" (1 font-lock-string-face t)) + + ; the argument of the goto statement is a label + '( "\\[ \t]*\\([a-zA-Z0-9_]+\\)" (1 + font-lock-constant-face)) + + ; the keywords of batch (which are not built-in commands) + (concat "\\<\\(cmdextversion\\|" + "d\\(efined\\|isableextensions\\|o\\)\\|" + "e\\(lse\\|n\\(ableextensions\\|dlocal\\)" + "\\|qu\\|rrorlevel\\|xist\\)\\|for\\|" + "goto\\|i[fn]\\|n\\(eq\\|ot\\)\\|setlocal\\)\\>") + + ; built-in DOS commands + (cons (concat "\\<\\(a\\(ssoc\\|t\\(\\|trib\\)\\)\\|break\\|" + "c\\(a\\(cls\\|ll\\)\\|d\\|h\\(cp\\|dir\\|k\\(" + "dsk\\|ntfs\\)\\)\\|ls\\|md\\|o\\(lor\\|mp\\(\\|act\\)" + "\\|nvert\\|py\\)\\)\\|d\\(ate\\|el\\|i\\(" + "r\\|skco\\(mp\\|py\\)\\)\\|oskey\\)\\|" + "e\\(cho\\|rase\\|xit\\)\\|" + "f\\(c\\|ind\\(\\|str\\)\\|for\\(\\|mot\\)\\|type\\)\\|" + "graftabl\\|help\\|label\\|" + "m\\(d\\|mkdir\\|o[dvr]e\\)\\|p\\(a\\(th\\|use\\)" + "\\|opd\\|r\\(int\\|opmt\\)\\|ushd\\)\\|" + "r\\(d\\|e\\(cover\\|n\\(\\|ame\\)\\|place\\)\\|mdir\\)\\|" + "s\\(et\\|hift\\|ort\\|tart\\|ubst\\)\\|" + "t\\(i\\(me\\|tle\\)\\|ree\\|ype\\)\\|" + "v\\(er\\(\\|ify\\)\\|ol\\)\\|xcopy\\)\\>") + 'font-lock-builtin-face) + + ; variables are embeded in percent chars + '( "%[a-zA-Z0-9_]+%?" . font-lock-variable-name-face) + ; labels are formatted as constants + '( ":[a-zA-Z0-9_]+" . font-lock-constant-face) + + ; command line switches are hilighted as type-face + '( "[-/][a-zA-Z0-9_]+" . font-lock-type-face) + + ; variables set should also be hilighted with variable-name-face + '( "\\[ \t]*\\([a-zA-Z0-9_]+\\)" (1 font-lock-variable-name-face)) + ))) + + +;;;###autoload +(defun batch-mode () + "Major mode for editing batch scripts." + (interactive) + (kill-all-local-variables) + (setq major-mode 'batch-mode) + (setq mode-name "Avenue") + (set (make-local-variable 'indent-line-function) 'batch-indent-line) + (set (make-local-variable 'comment-start) "rem") + (set (make-local-variable 'comment-start-skip) "rem[ \t]*") + (set (make-local-variable 'font-lock-defaults) + '(batch-font-lock-keywords nil t nil)) + (run-hooks 'batch-mode-hook)) + +(defun batch-indent-line () + "Indent current line as batch script" + (let ((indent (batch-calculate-indent)) + beg shift-amt + (old-pos (- (point-max) (point)))) + (beginning-of-line) + (setq beg (point)) + (skip-chars-forward " \t") + (if (looking-at ")") + (setq indent (max (- indent batch-indent-level)))) + (message "prev indent: %d" indent) + (setq shift-amt (- indent (current-column))) + (if (not (zerop shift-amt)) + (progn + (delete-region beg (point)) + ; ArcView replaces tabs with single spaces, so we only insert + ; spaces to make indentation correct in ArcView. + (insert-char ? indent) + (if (> (- (point-max) old-pos) (point)) + (goto-char (- (point-max) old-pos))))) + shift-amt)) + +(defun batch-calculate-indent () + "Return appropriate indentation for the current line as batch code." + (save-excursion + (beginning-of-line) + (current-indentation) + (if (bobp) + 0 + (if (re-search-backward "^[ \t]*[^ \t\n\r]" nil t) + (if (looking-at "[ \t]*\\()[ \t]*else\\|for\\|if\\)\\>[^(\n]*([^)\n]*") + (+ (current-indentation) batch-indent-level) + (if (looking-at "[ \t]*[^(]*)[ \t]*") + (- (current-indentation) batch-indent-level) + (current-indentation))) + 0)))) + +(add-to-list 'auto-mode-alist '("\\.bat\\'" . batch-mode)) + +(provide 'batch-mode) + +;;; batch-mode.el ends here diff --git a/.emacs.d/color-theme.el b/.emacs.d/color-theme.el new file mode 100644 index 0000000..c92c1a5 --- /dev/null +++ b/.emacs.d/color-theme.el @@ -0,0 +1,1668 @@ +;;; color-theme.el --- install color themes + +;; Copyright (C) 1999, 2000 Jonadab the Unsightly One +;; Copyright (C) 2000, 2001, 2002, 2003 Alex Schroeder +;; Copyright (C) 2003, 2004, 2005, 2006 Xavier Maillard + +;; Version: 6.6.0 +;; Keywords: faces +;; Author: Jonadab the Unsightly One +;; Maintainer: Xavier Maillard +;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ColorTheme + +;; This file is not (YET) part of GNU Emacs. + +;; This is free software; you can redistribute it and/or modify it under +;; the terms of the GNU General Public License as published by the Free +;; Software Foundation; either version 2, or (at your option) any later +;; version. +;; +;; This 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 GNU General Public License +;; for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +;; MA 02111-1307, USA. + +;;; Commentary: + +;; Please read README and BUGS files for any relevant help. +;; Contributors (not themers) should also read HACKING file. + +;;; Thanks + +;; Deepak Goel +;; S. Pokrovsky for ideas and discussion. +;; Gordon Messmer for ideas and discussion. +;; Sriram Karra for the color-theme-submit stuff. +;; Olgierd `Kingsajz' Ziolko for the spec-filter idea. +;; Brian Palmer for color-theme-library ideas and code +;; All the users that contributed their color themes. + + + +;;; Code: +(eval-when-compile + (require 'easymenu) + (require 'reporter) + (require 'sendmail)) + +(require 'cl); set-difference is a function... + +;; for custom-face-attributes-get or face-custom-attributes-get +(require 'cus-face) +(require 'wid-edit); for widget-apply stuff in cus-face.el + +(defconst color-theme-maintainer-address "zedek@gnu.org" + "Address used by `submit-color-theme'.") + +;; Emacs / XEmacs compatibility and workaround layer + +(cond ((and (facep 'tool-bar) + (not (facep 'toolbar))) + (put 'toolbar 'face-alias 'tool-bar)) + ((and (facep 'toolbar) + (not (facep 'tool-bar))) + (put 'tool-bar 'face-alias 'toolbar))) + +(defvar color-theme-xemacs-p (and (featurep 'xemacs) + (string-match "XEmacs" emacs-version)) + "Non-nil if running XEmacs.") + +;; Add this since it appears to miss in emacs-2x +(or (fboundp 'replace-in-string) + (defun replace-in-string (target old new) + (replace-regexp-in-string old new target))) + +;; face-attr-construct has a problem in Emacs 20.7 and older when +;; dealing with inverse-video faces. Here is a short test to check +;; wether you are affected. + +;; (set-background-color "wheat") +;; (set-foreground-color "black") +;; (setq a (make-face 'a-face)) +;; (face-spec-set a '((t (:background "white" :foreground "black" :inverse-video t)))) +;; (face-attr-construct a) +;; => (:background "black" :inverse-video t) + +;; The expected response is the original specification: +;; => (:background "white" :foreground "black" :inverse-video t) + +;; That's why we depend on cus-face.el functionality. + +(cond ((fboundp 'custom-face-attributes-get) + (defun color-theme-face-attr-construct (face frame) + (if (atom face) + (custom-face-attributes-get face frame) + (if (and (consp face) (eq (car face) 'quote)) + (custom-face-attributes-get (cadr face) frame) + (custom-face-attributes-get (car face) frame))))) + ((fboundp 'face-custom-attributes-get) + (defalias 'color-theme-face-attr-construct + 'face-custom-attributes-get)) + (t + (defun color-theme-face-attr-construct (&rest ignore) + (error "Unable to construct face attributes")))) + +(defun color-theme-alist (plist) + "Transform PLIST into an alist if it is a plist and return it. +If the first element of PLIST is a cons cell, we just return PLIST, +assuming PLIST to be an alist. If the first element of plist is not a +symbol, this is an error: We cannot distinguish a plist from an ordinary +list, but a list that doesn't start with a symbol is certainly no plist +and no alist. + +This is used to make sure `default-frame-alist' really is an alist and not +a plist. In XEmacs, the alist is deprecated; a plist is used instead." + (cond ((consp (car plist)) + plist) + ((not (symbolp (car plist))) + (error "Wrong type argument: plist, %S" plist)) + ((featurep 'xemacs) + (plist-to-alist plist)))); XEmacs only + +;; Customization + +(defgroup color-theme nil + "Color Themes for Emacs. +A color theme consists of frame parameter settings, variable settings, +and face definitions." + :version "20.6" + :group 'faces) + +(defcustom color-theme-legal-frame-parameters "\\(color\\|mode\\)$" + "Regexp that matches frame parameter names. +Only frame parameter names that match this regexp can be changed as part +of a color theme." + :type '(choice (const :tag "Colors only" "\\(color\\|mode\\)$") + (const :tag "Colors, fonts, and size" + "\\(color\\|mode\\|font\\|height\\|width\\)$") + (regexp :tag "Custom regexp")) + :group 'color-theme + :link '(info-link "(elisp)Window Frame Parameters")) + +(defcustom color-theme-legal-variables "\\(color\\|face\\)$" + "Regexp that matches variable names. +Only variables that match this regexp can be changed as part of a color +theme. In addition to matching this name, the variables have to be user +variables (see function `user-variable-p')." + :type 'regexp + :group 'color-theme) + +(defcustom color-theme-illegal-faces "^w3-" + "Regexp that matches face names forbidden in themes. +The default setting \"^w3-\" excludes w3 faces since these +are created dynamically." + :type 'regexp + :group 'color-theme + :link '(info-link "(elisp)Faces for Font Lock") + :link '(info-link "(elisp)Standard Faces")) + +(defcustom color-theme-illegal-default-attributes '(:family :height :width) + "A list of face properties to be ignored when installing faces. +This prevents Emacs from doing terrible things to your display just because +a theme author likes weird fonts." + :type '(repeat symbol) + :group 'color-theme) + +(defcustom color-theme-is-global t + "*Determines wether a color theme is installed on all frames or not. +If non-nil, color themes will be installed for all frames. +If nil, color themes will be installed for the selected frame only. + +A possible use for this variable is dynamic binding. Here is a larger +example to put in your ~/.emacs; it will make the Blue Sea color theme +the default used for the first frame, and it will create two additional +frames with different color themes. + +setup: + \(require 'color-theme) + ;; set default color theme + \(color-theme-blue-sea) + ;; create some frames with different color themes + \(let ((color-theme-is-global nil)) + \(select-frame (make-frame)) + \(color-theme-gnome2) + \(select-frame (make-frame)) + \(color-theme-standard)) + +Please note that using XEmacs and and a nil value for +color-theme-is-global will ignore any variable settings for the color +theme, since XEmacs doesn't have frame-local variable bindings. + +Also note that using Emacs and a non-nil value for color-theme-is-global +will install a new color theme for all frames. Using XEmacs and a +non-nil value for color-theme-is-global will install a new color theme +only on those frames that are not using a local color theme." + :type 'boolean + :group 'color-theme) + +(defcustom color-theme-is-cumulative t + "*Determines wether new color themes are installed on top of each other. +If non-nil, installing a color theme will undo all settings made by +previous color themes." + :type 'boolean + :group 'color-theme) + +(defcustom color-theme-directory nil + "Directory where we can find additionnal themes (personnal). +Note that there is at least one directory shipped with the official +color-theme distribution where all contributed themes are located. +This official selection can't be changed with that variable. +However, you still can decide to turn it on or off and thus, +not be shown with all themes but yours." + :type '(repeat string) + :group 'color-theme) + +(defcustom color-theme-libraries (directory-files + (concat + (file-name-directory (locate-library "color-theme")) + "/themes") t "^color-theme") + "A list of files, which will be loaded in color-theme-initialize depending +on `color-theme-load-all-themes' value. +This allows a user to prune the default color-themes (which can take a while +to load)." + :type '(repeat string) + :group 'color-theme) + +(defcustom color-theme-load-all-themes t + "When t, load all color-theme theme files +as presented by `color-theme-libraries'. Else +do not load any of this themes." + :type 'boolean + :group 'color-theme) + +(defcustom color-theme-mode-hook nil + "Hook for color-theme-mode." + :type 'hook + :group 'color-theme) + +(defvar color-theme-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "RET") 'color-theme-install-at-point) + (define-key map (kbd "c") 'list-colors-display) + (define-key map (kbd "d") 'color-theme-describe) + (define-key map (kbd "f") 'list-faces-display) + (define-key map (kbd "i") 'color-theme-install-at-point) + (define-key map (kbd "l") 'color-theme-install-at-point-for-current-frame) + (define-key map (kbd "p") 'color-theme-print) + (define-key map (kbd "q") 'bury-buffer) + (define-key map (kbd "?") 'color-theme-describe) + (if color-theme-xemacs-p + (define-key map (kbd "") 'color-theme-install-at-mouse) + (define-key map (kbd "") 'color-theme-install-at-mouse)) + map) + "Mode map used for the buffer created by `color-theme-select'.") + +(defvar color-theme-initialized nil + "Internal variable determining whether color-theme-initialize has been invoked yet") + +(defvar color-theme-buffer-name "*Color Theme Selection*" + "Name of the color theme selection buffer.") + +(defvar color-theme-original-frame-alist nil + "nil until one of the color themes has been installed.") + +(defvar color-theme-history nil + "List of color-themes called, in reverse order") + +(defcustom color-theme-history-max-length nil + "Max length of history to maintain. +Two other values are acceptable: t means no limit, and +nil means that no history is maintained." + :type '(choice (const :tag "No history" nil) + (const :tag "Unlimited length" t) + integer) + :group 'color-theme) + +(defvar color-theme-counter 0 + "Counter for every addition to `color-theme-history'. +This counts how many themes were installed, regardless +of `color-theme-history-max-length'.") + +(defvar color-theme-entry-path (cond + ;; Emacs 22.x and later + ((lookup-key global-map [menu-bar tools]) + '("tools")) + ;; XEmacs + ((featurep 'xemacs) + (setq tool-entry '("Tools"))) + ;; Emacs < 22 + (t + '("Tools"))) + "Menu tool entry path.") + +(defun color-theme-add-to-history (name) + "Add color-theme NAME to `color-theme-history'." + (setq color-theme-history + (cons (list name color-theme-is-cumulative) + color-theme-history) + color-theme-counter (+ 1 color-theme-counter)) + ;; Truncate the list if necessary. + (when (and (integerp color-theme-history-max-length) + (>= (length color-theme-history) + color-theme-history-max-length)) + (setcdr (nthcdr (1- color-theme-history-max-length) + color-theme-history) + nil))) + +;; (let ((l '(1 2 3 4 5))) +;; (setcdr (nthcdr 2 l) nil) +;; l) + + + +;; List of color themes used to create the *Color Theme Selection* +;; buffer. + +(defvar color-themes + '((color-theme-aalto-dark "Aalto Dark" "Jari Aalto ") + (color-theme-aalto-light "Aalto Light" "Jari Aalto ") + (color-theme-aliceblue "Alice Blue" "Girish Bharadwaj ") + (color-theme-andreas "Andreas" "Andreas Busch ") + (color-theme-arjen "Arjen" "Arjen Wiersma ") + (color-theme-beige-diff "Beige Diff" "Alex Schroeder " t) + (color-theme-bharadwaj "Bharadwaj" "Girish Bharadwaj ") + (color-theme-bharadwaj-slate "Bharadwaj Slate" "Girish Bharadwaj ") + (color-theme-billw "Billw" "Bill White ") + (color-theme-black-on-gray "BlackOnGray" "Sudhir Bhojwani ") + (color-theme-blippblopp "Blipp Blopp" "Thomas Sicheritz-Ponten") + (color-theme-simple-1 "Black" "Jonadab ") + (color-theme-blue-erc "Blue ERC" "Alex Schroeder " t) + (color-theme-blue-gnus "Blue Gnus" "Alex Schroeder " t) + (color-theme-blue-mood "Blue Mood" "Nelson Loyola ") + (color-theme-blue-sea "Blue Sea" "Alex Schroeder ") + (color-theme-calm-forest "Calm Forest" "Artur Hefczyc ") + (color-theme-charcoal-black "Charcoal Black" "Lars Chr. Hausmann ") + (color-theme-goldenrod "Cheap Goldenrod" "Alex Schroeder ") + (color-theme-clarity "Clarity and Beauty" "Richard Wellum ") + (color-theme-classic "Classic" "Frederic Giroud ") + (color-theme-comidia "Comidia" "Marcelo Dias de Toledo ") + (color-theme-jsc-dark "Cooper Dark" "John S Cooper ") + (color-theme-jsc-light "Cooper Light" "John S Cooper ") + (color-theme-jsc-light2 "Cooper Light 2" "John S Cooper ") + (color-theme-dark-blue "Dark Blue" "Chris McMahan ") + (color-theme-dark-blue2 "Dark Blue 2" "Chris McMahan ") + (color-theme-dark-green "Dark Green" "eddy_woody@hotmail.com") + (color-theme-dark-laptop "Dark Laptop" "Laurent Michel ") + (color-theme-deep-blue "Deep Blue" "Tomas Cerha ") + (color-theme-digital-ofs1 "Digital OFS1" "Gareth Owen ") + (color-theme-euphoria "Euphoria" "oGLOWo@oGLOWo.cjb.net") + (color-theme-feng-shui "Feng Shui" "Walter Higgins ") + (color-theme-fischmeister "Fischmeister" + "Sebastian Fischmeister ") + (color-theme-gnome "Gnome" "Jonadab ") + (color-theme-gnome2 "Gnome 2" "Alex Schroeder ") + (color-theme-gray1 "Gray1" "Paul Pulli ") + (color-theme-gray30 "Gray30" "Girish Bharadwaj ") + (color-theme-kingsajz "Green Kingsajz" "Olgierd `Kingsajz' Ziolko ") + (color-theme-greiner "Greiner" "Kevin Greiner ") + (color-theme-gtk-ide "GTK IDE" "Gordon Messmer ") + (color-theme-high-contrast "High Contrast" "Alex Schroeder ") + (color-theme-hober "Hober" "Edward O'Connor ") + (color-theme-infodoc "Infodoc" "Frederic Giroud ") + (color-theme-jb-simple "JB Simple" "jeff@dvns.com") + (color-theme-jedit-grey "Jedit Grey" "Gordon Messmer ") + (color-theme-jonadabian "Jonadab" "Jonadab ") + (color-theme-jonadabian-slate "Jonadabian Slate" "Jonadab ") + (color-theme-katester "Katester" "Higgins_Walter@emc.com") + (color-theme-late-night "Late Night" "Alex Schroeder ") + (color-theme-lawrence "Lawrence" "lawrence mitchell ") + (color-theme-lethe "Lethe" "Ivica Loncar ") + (color-theme-ld-dark "Linh Dang Dark" "Linh Dang ") + (color-theme-marine "Marine" "Girish Bharadwaj ") + (color-theme-matrix "Matrix" "Walter Higgins ") + (color-theme-marquardt "Marquardt" "Colin Marquardt ") + (color-theme-midnight "Midnight" "Gordon Messmer ") + (color-theme-mistyday "Misty Day" "Hari Kumar ") + (color-theme-montz "Montz" "Brady Montz ") + (color-theme-oswald "Oswald" "Tom Oswald ") + (color-theme-parus "Parus" "Jon K Hellan ") + (color-theme-pierson "Pierson" "Dan L. Pierson ") + (color-theme-ramangalahy "Ramangalahy" "Solofo Ramangalahy ") + (color-theme-raspopovic "Raspopovic" "Pedja Raspopovic ") + (color-theme-renegade "Renegade" "Dave Benjamin ") + (color-theme-resolve "Resolve" "Damien Elmes ") + (color-theme-retro-green "Retro Green" "Alex Schroeder ") + (color-theme-retro-orange "Retro Orange" "Alex Schroeder ") + (color-theme-robin-hood "Robin Hood" "Alex Schroeder ") + (color-theme-rotor "Rotor" "Jinwei Shen ") + (color-theme-ryerson "Ryerson" "Luis Fernandes ") + (color-theme-salmon-diff "Salmon Diff" "Alex Schroeder " t) + (color-theme-salmon-font-lock "Salmon Font-Lock" "Alex Schroeder " t) + (color-theme-scintilla "Scintilla" "Gordon Messmer ") + (color-theme-shaman "Shaman" "shaman@interdon.net") + (color-theme-sitaramv-nt "Sitaram NT" + "Sitaram Venkatraman ") + (color-theme-sitaramv-solaris "Sitaram Solaris" + "Sitaram Venkatraman ") + (color-theme-snow "Snow" "Nicolas Rist ") + (color-theme-snowish "Snowish" "Girish Bharadwaj ") + (color-theme-standard-ediff "Standard Ediff" "Emacs Team, added by Alex Schroeder " t) + (color-theme-standard "Standard Emacs 20" "Emacs Team, added by Alex Schroeder ") + (color-theme-emacs-21 "Standard Emacs 21" "Emacs Team, added by Alex Schroeder ") + (color-theme-emacs-nw "Standard Emacs 21 No Window" "Emacs Team, added by D. Goel ") + (color-theme-xemacs "Standard XEmacs" "XEmacs Team, added by Alex Schroeder ") + (color-theme-subtle-blue "Subtle Blue" "Chris McMahan ") + (color-theme-subtle-hacker "Subtle Hacker" "Colin Walters ") + (color-theme-taming-mr-arneson "Taming Mr Arneson" "Erik Arneson ") + (color-theme-taylor "Taylor" "Art Taylor ") + (color-theme-tty-dark "TTY Dark" "O Polite ") + (color-theme-vim-colors "Vim Colors" "Michael Soulier ") + (color-theme-whateveryouwant "Whateveryouwant" "Fabien Penso , color by Scott Jaderholm ") + (color-theme-wheat "Wheat" "Alex Schroeder ") + (color-theme-pok-wob "White On Black" "S. Pokrovsky ") + (color-theme-pok-wog "White On Grey" "S. Pokrovsky ") + (color-theme-word-perfect "WordPerfect" "Thomas Gehrlein ") + (color-theme-xp "XP" "Girish Bharadwaj ")) + "List of color themes. + +Each THEME is itself a three element list (FUNC NAME MAINTAINER &optional LIBRARY). + +FUNC is a color theme function which does the setup. The function +FUNC may call `color-theme-install'. The color theme function may be +interactive. + +NAME is the name of the theme and MAINTAINER is the name and/or email of +the maintainer of the theme. + +If LIBRARY is non-nil, the color theme will be considered a library and +may not be shown in the default menu. + +If you defined your own color theme and want to add it to this list, +use something like this: + + (add-to-list 'color-themes '(color-theme-gnome2 \"Gnome2\" \"Alex\"))") + +;;; Functions + +(defun color-theme-backup-original-values () + "Back up the original `default-frame-alist'. +The values are stored in `color-theme-original-frame-alist' on +startup." + (if (null color-theme-original-frame-alist) + (setq color-theme-original-frame-alist + (color-theme-filter (frame-parameters (selected-frame)) + color-theme-legal-frame-parameters)))) +(add-hook 'after-init-hook 'color-theme-backup-original-values) + +;;;###autoload +(defun color-theme-select (&optional arg) + "Displays a special buffer for selecting and installing a color theme. +With optional prefix ARG, this buffer will include color theme libraries +as well. A color theme library is in itself not complete, it must be +used as part of another color theme to be useful. Thus, color theme +libraries are mainly useful for color theme authors." + (interactive "P") + (unless color-theme-initialized (color-theme-initialize)) + (switch-to-buffer (get-buffer-create color-theme-buffer-name)) + (setq buffer-read-only nil) + (erase-buffer) + ;; recreate the snapshot if necessary + (when (or (not (assq 'color-theme-snapshot color-themes)) + (not (commandp 'color-theme-snapshot))) + (fset 'color-theme-snapshot (color-theme-make-snapshot)) + (setq color-themes (delq (assq 'color-theme-snapshot color-themes) + color-themes) + color-themes (delq (assq 'bury-buffer color-themes) + color-themes) + color-themes (append '((color-theme-snapshot + "[Reset]" "Undo changes, if possible.") + (bury-buffer + "[Quit]" "Bury this buffer.")) + color-themes))) + (dolist (theme color-themes) + (let ((func (nth 0 theme)) + (name (nth 1 theme)) + (author (nth 2 theme)) + (library (nth 3 theme)) + (desc)) + (when (or (not library) arg) + (setq desc (format "%-23s %s" + (if library (concat name " [lib]") name) + author)) + (put-text-property 0 (length desc) 'color-theme func desc) + (put-text-property 0 (length name) 'face 'bold desc) + (put-text-property 0 (length name) 'mouse-face 'highlight desc) + (insert desc) + (newline)))) + (goto-char (point-min)) + (setq buffer-read-only t) + (set-buffer-modified-p nil) + (color-theme-mode)) + +(when (require 'easymenu) + (easy-menu-add-item nil color-theme-entry-path "--") + (easy-menu-add-item nil color-theme-entry-path + ["Color Themes" color-theme-select t])) + +(defun color-theme-mode () + "Major mode to select and install color themes. + +Use \\[color-theme-install-at-point] to install a color theme on all frames. +Use \\[color-theme-install-at-point-for-current-frame] to install a color theme for the current frame only. + +The changes are applied on top of your current setup. This is a +feature. + +Some of the themes should be considered extensions to the standard color +theme: they modify only a limited number of faces and variables. To +verify the final look of a color theme, install the standard color +theme, then install the other color theme. This is a feature. It allows +you to mix several color themes. + +Use \\[color-theme-describe] to read more about the color theme function at point. +If you want to install the color theme permanently, put the call to the +color theme function into your ~/.emacs: + + \(require 'color-theme) + \(color-theme-gnome2) + +If you worry about the size of color-theme.el: You are right. Use +\\[color-theme-print] to print the current color theme and save the resulting buffer +as ~/.emacs-color-theme. Now you can install only this specific color +theme in your .emacs: + + \(load-file \"~/.emacs-color-theme\") + \(my-color-theme) + +The Emacs menu is not affected by color themes within Emacs. Depending +on the toolkit you used to compile Emacs, you might have to set specific +X ressources. See the info manual for more information. Here is an +example ~/.Xdefaults fragment: + + emacs*Background: DarkSlateGray + emacs*Foreground: wheat + +\\{color-theme-mode-map} + +The color themes are listed in `color-themes', which see." + (kill-all-local-variables) + (setq major-mode 'color-theme-mode) + (setq mode-name "Color Themes") + (use-local-map color-theme-mode-map) + (when (functionp 'goto-address); Emacs + (goto-address)) + (run-hooks 'color-theme-mode-hook)) + +;;; Commands in Color Theme Selection mode + +;;;###autoload +(defun color-theme-describe () + "Describe color theme listed at point. +This shows the documentation of the value of text-property color-theme +at point. The text-property color-theme should be a color theme +function. See `color-themes'." + (interactive) + (describe-function (get-text-property (point) 'color-theme))) + +;;;###autoload +(defun color-theme-install-at-mouse (event) + "Install color theme clicked upon using the mouse. +First argument EVENT is used to set point. Then +`color-theme-install-at-point' is called." + (interactive "e") + (save-excursion + (mouse-set-point event) + (color-theme-install-at-point))) + +;;;autoload +(defun color-theme-install-at-point () + "Install color theme at point. +This calls the value of the text-property `color-theme' at point. +The text-property `color-theme' should be a color theme function. +See `color-themes'." + (interactive) + (let ((func (get-text-property (point) 'color-theme))) + ;; install theme + (if func + (funcall func)) + ;; If goto-address is being used, remove all overlays in the current + ;; buffer and run it again. The face used for the mail addresses in + ;; the the color theme selection buffer is based on the variable + ;; goto-address-mail-face. Changes in that variable will not affect + ;; existing overlays, however, thereby confusing users. + (when (functionp 'goto-address); Emacs + (dolist (o (overlays-in (point-min) (point-max))) + (delete-overlay o)) + (goto-address)))) + +;;;###autoload +(defun color-theme-install-at-point-for-current-frame () + "Install color theme at point for current frame only. +Binds `color-theme-is-global' to nil and calls +`color-theme-install-at-point'." + (interactive) + (let ((color-theme-is-global nil)) + (color-theme-install-at-point))) + + + +;; Taking a snapshot of the current color theme and pretty printing it. + +(defun color-theme-filter (old-list regexp &optional exclude) + "Filter OLD-LIST. +The resulting list will be newly allocated and contains only elements +with names matching REGEXP. OLD-LIST may be a list or an alist. If you +want to filter a plist, use `color-theme-alist' to convert your plist to +an alist, first. + +If the optional argument EXCLUDE is non-nil, then the sense is +reversed: only non-matching elements will be retained." + (let (elem new-list) + (dolist (elem old-list) + (setq name (symbol-name (if (listp elem) (car elem) elem))) + (when (or (and (not exclude) + (string-match regexp name)) + (and exclude + (not (string-match regexp name)))) + ;; Now make sure that if elem is a cons cell, and the cdr of + ;; that cons cell is a string, then we need a *new* string in + ;; the new list. Having a new cons cell is of no use because + ;; modify-frame-parameters will modify this string, thus + ;; modifying our color theme functions! + (when (and (consp elem) + (stringp (cdr elem))) + (setq elem (cons (car elem) + (copy-sequence (cdr elem))))) + ;; Now store elem + (setq new-list (cons elem new-list)))) + new-list)) + +(defun color-theme-spec-filter (spec) + "Filter the attributes in SPEC. +This makes sure that SPEC has the form ((t (PLIST ...))). +Only properties not in `color-theme-illegal-default-attributes' +are included in the SPEC returned." + (let ((props (cadar spec)) + result prop val) + (while props + (setq prop (nth 0 props) + val (nth 1 props) + props (nthcdr 2 props)) + (unless (memq prop color-theme-illegal-default-attributes) + (setq result (cons val (cons prop result))))) + `((t ,(nreverse result))))) + +;; (color-theme-spec-filter '((t (:background "blue3")))) +;; (color-theme-spec-filter '((t (:stipple nil :background "Black" :foreground "SteelBlue" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width semi-condensed :family "misc-fixed")))) + +(defun color-theme-plist-delete (plist prop) + "Delete property PROP from property list PLIST by side effect. +This modifies PLIST." + ;; deal with prop at the start + (while (eq (car plist) prop) + (setq plist (cddr plist))) + ;; deal with empty plist + (when plist + (let ((lastcell (cdr plist)) + (l (cddr plist))) + (while l + (if (eq (car l) prop) + (progn + (setq l (cddr l)) + (setcdr lastcell l)) + (setq lastcell (cdr l) + l (cddr l)))))) + plist) + +;; (color-theme-plist-delete '(a b c d e f g h) 'a) +;; (color-theme-plist-delete '(a b c d e f g h) 'b) +;; (color-theme-plist-delete '(a b c d e f g h) 'c) +;; (color-theme-plist-delete '(a b c d e f g h) 'g) +;; (color-theme-plist-delete '(a b c d c d e f g h) 'c) +;; (color-theme-plist-delete '(a b c d e f c d g h) 'c) + +(if (or (featurep 'xemacs) + (< emacs-major-version 21)) + (defalias 'color-theme-spec-compat 'identity) + (defun color-theme-spec-compat (spec) + "Filter the attributes in SPEC such that is is never invalid. +Example: Eventhough :bold works in Emacs, it is not recognized by +`customize-face' -- and then the face is uncustomizable. This +function replaces a :bold attribute with the corresponding :weight +attribute, if there is no :weight, or deletes it. This undoes the +doings of `color-theme-spec-canonical-font', more or less." + (let ((props (cadar spec))) + (when (plist-member props :bold) + (setq props (color-theme-plist-delete props :bold)) + (unless (plist-member props :weight) + (setq props (plist-put props :weight 'bold)))) + (when (plist-member props :italic) + (setq props (color-theme-plist-delete props :italic)) + (unless (plist-member props :slant) + (setq props (plist-put props :slant 'italic)))) + `((t ,props))))) + +;; (color-theme-spec-compat '((t (:foreground "blue" :bold t)))) +;; (color-theme-spec-compat '((t (:bold t :foreground "blue" :weight extra-bold)))) +;; (color-theme-spec-compat '((t (:italic t :foreground "blue")))) +;; (color-theme-spec-compat '((t (:slant oblique :italic t :foreground "blue")))) + +(defun color-theme-spec-canonical-font (atts) + "Add :bold and :italic attributes if necessary." + ;; add these to the front of atts -- this will keept the old value for + ;; customize-face in Emacs 21. + (when (and (memq (plist-get atts :weight) + '(ultra-bold extra-bold bold semi-bold)) + (not (plist-get atts :bold))) + (setq atts (cons :bold (cons t atts)))) + (when (and (not (memq (plist-get atts :slant) + '(normal nil))) + (not (plist-get atts :italic))) + (setq atts (cons :italic (cons t atts)))) + atts) +;; (color-theme-spec-canonical-font (color-theme-face-attr-construct 'bold (selected-frame))) +;; (defface foo '((t (:weight extra-bold))) "foo") +;; (color-theme-spec-canonical-font (color-theme-face-attr-construct 'foo (selected-frame))) +;; (face-spec-set 'foo '((t (:weight extra-bold))) nil) +;; (face-spec-set 'foo '((t (:bold t))) nil) +;; (face-spec-set 'foo '((t (:bold t :weight extra-bold))) nil) + +;; Handle :height according to NEWS file for Emacs 21 +(defun color-theme-spec-resolve-height (old new) + "Return the new height given OLD and NEW height. +OLD is the current setting, NEW is the setting inherited from." + (cond ((not old) + new) + ((integerp old) + old) + ((and (floatp old) + (integerp new)) + (round (* old new))) + ((and (floatp old) + (floatp new)) + (* old new)) + ((and (functionp old) + (integerp new)) + (round (funcall old new))) + ((and (functionp old) + (float new)) + `(lambda (f) (* (funcall ,old f) ,new))) + ((and (functionp old) + (functionp new)) + `(lambda (f) (* (funcall ,old (funcall ,new f))))) + (t + (error "Illegal :height attributes: %S or %S" old new)))) +;; (color-theme-spec-resolve-height 12 1.2) +;; (color-theme-spec-resolve-height 1.2 1.2) +;; (color-theme-spec-resolve-height 1.2 12) +;; (color-theme-spec-resolve-height 1.2 'foo) +;; (color-theme-spec-resolve-height (lambda (f) (* 2 f)) 5) +;; (color-theme-spec-resolve-height (lambda (f) (* 2 f)) 2.0) +;; the following lambda is the result from the above calculation +;; (color-theme-spec-resolve-height (lambda (f) (* (funcall (lambda (f) (* 2 f)) f) 2.0)) 5) + +(defun color-theme-spec-resolve-inheritance (atts) + "Resolve all occurences of the :inherit attribute." + (let ((face (plist-get atts :inherit))) + ;; From the Emacs 21 NEWS file: "Attributes from inherited faces are + ;; merged into the face like an underlying face would be." -- + ;; therefore properties of the inherited face only add missing + ;; attributes. + (when face + ;; remove :inherit face from atts -- this assumes only one + ;; :inherit attribute. + (setq atts (delq ':inherit (delq face atts))) + (let ((more-atts (color-theme-spec-resolve-inheritance + (color-theme-face-attr-construct + face (selected-frame)))) + att val) + (while more-atts + (setq att (car more-atts) + val (cadr more-atts) + more-atts (cddr more-atts)) + ;; Color-theme assumes that no value is ever 'unspecified. + (cond ((eq att ':height); cumulative effect! + (setq atts (plist-put atts + ':height + (color-theme-spec-resolve-height + (plist-get atts att) + val)))) + ;; Default: Only put if it has not been specified before. + ((not (plist-get atts att)) + (setq atts (cons att (cons val atts)))) + +)))) + atts)) +;; (color-theme-spec-resolve-inheritance '(:bold t)) +;; (color-theme-spec-resolve-inheritance '(:bold t :foreground "blue")) +;; (color-theme-face-attr-construct 'font-lock-comment-face (selected-frame)) +;; (color-theme-spec-resolve-inheritance '(:bold t :inherit font-lock-comment-face)) +;; (color-theme-spec-resolve-inheritance '(:bold t :foreground "red" :inherit font-lock-comment-face)) +;; (color-theme-face-attr-construct 'Info-title-2-face (selected-frame)) +;; (color-theme-face-attr-construct 'Info-title-3-face (selected-frame)) +;; (color-theme-face-attr-construct 'Info-title-4-face (selected-frame)) +;; (color-theme-spec-resolve-inheritance '(:inherit Info-title-2-face)) + +;; The :inverse-video attribute causes Emacs to swap foreground and +;; background colors, XEmacs does not. Therefore, if anybody chooses +;; the inverse-video attribute, we 1. swap the colors ourselves in Emacs +;; and 2. we remove the inverse-video attribute in Emacs and XEmacs. +;; Inverse-video is only useful on a monochrome tty. +(defun color-theme-spec-maybe-invert (atts) + "Remove the :inverse-video attribute from ATTS. +If ATTS contains :inverse-video t, remove it and swap foreground and +background color. Return ATTS." + (let ((inv (plist-get atts ':inverse-video))) + (if inv + (let (result att) + (while atts + (setq att (car atts) + atts (cdr atts)) + (cond ((and (eq att :foreground) (not color-theme-xemacs-p)) + (setq result (cons :background result))) + ((and (eq att :background) (not color-theme-xemacs-p)) + (setq result (cons :foreground result))) + ((eq att :inverse-video) + (setq atts (cdr atts))); this prevents using dolist + (t + (setq result (cons att result))))) + (nreverse result)) + ;; else + atts))) +;; (color-theme-spec-maybe-invert '(:bold t)) +;; (color-theme-spec-maybe-invert '(:foreground "blue")) +;; (color-theme-spec-maybe-invert '(:background "red")) +;; (color-theme-spec-maybe-invert '(:inverse-video t)) +;; (color-theme-spec-maybe-invert '(:inverse-video t :foreground "red")) +;; (color-theme-spec-maybe-invert '(:inverse-video t :background "red")) +;; (color-theme-spec-maybe-invert '(:inverse-video t :background "red" :foreground "blue" :bold t)) +;; (color-theme-spec-maybe-invert '(:inverse-video nil :background "red" :foreground "blue" :bold t)) + +(defun color-theme-spec (face) + "Return a list for FACE which has the form (FACE SPEC). +See `defface' for the format of SPEC. In this case we use only one +DISPLAY, t, and determine ATTS using `color-theme-face-attr-construct'. +If ATTS is nil, (nil) is used instead. + +If ATTS contains :inverse-video t, we remove it and swap foreground and +background color using `color-theme-spec-maybe-invert'. We do this +because :inverse-video is handled differently in Emacs and XEmacs. We +will loose on a tty without colors, because in that situation, +:inverse-video means something." + (let ((atts + (color-theme-spec-canonical-font + (color-theme-spec-maybe-invert + (color-theme-spec-resolve-inheritance + (color-theme-face-attr-construct face (selected-frame))))))) + (if atts + `(,face ((t ,atts))) + `(,face ((t (nil))))))) + +(defun color-theme-get-params () + "Return a list of frame parameter settings usable in a color theme. +Such an alist may be installed by `color-theme-install-frame-params'. The +frame parameters returned must match `color-theme-legal-frame-parameters'." + (let ((params (color-theme-filter (frame-parameters (selected-frame)) + color-theme-legal-frame-parameters))) + (sort params (lambda (a b) (string< (symbol-name (car a)) + (symbol-name (car b))))))) + +(defun color-theme-get-vars () + "Return a list of variable settings usable in a color theme. +Such an alist may be installed by `color-theme-install-variables'. +The variable names must match `color-theme-legal-variables', and the +variable must be a user variable according to `user-variable-p'." + (let ((vars) + (val)) + (mapatoms (lambda (v) + (and (boundp v) + (user-variable-p v) + (string-match color-theme-legal-variables + (symbol-name v)) + (setq val (eval v)) + (add-to-list 'vars (cons v val))))) + (sort vars (lambda (a b) (string< (car a) (car b)))))) + +(defun color-theme-print-alist (alist) + "Print ALIST." + (insert "\n " (if alist "(" "nil")) + (dolist (elem alist) + (when (= (preceding-char) ?\)) + (insert "\n ")) + (prin1 elem (current-buffer))) + (when (= (preceding-char) ?\)) (insert ")"))) + +(defun color-theme-get-faces () + "Return a list of faces usable in a color theme. +Such an alist may be installed by `color-theme-install-faces'. The +faces returned must not match `color-theme-illegal-faces'." + (let ((faces (color-theme-filter (face-list) color-theme-illegal-faces t))) + ;; default face must come first according to comments in + ;; custom-save-faces, the rest is to be sorted by name + (cons 'default (sort (delq 'default faces) 'string-lessp)))) + +(defun color-theme-get-face-definitions () + "Return face settings usable in a color-theme." + (let ((faces (color-theme-get-faces))) + (mapcar 'color-theme-spec faces))) + +(defun color-theme-print-faces (faces) + "Print face settings for all faces returned by `color-theme-get-faces'." + (when faces + (insert "\n ")) + (dolist (face faces) + (when (= (preceding-char) ?\)) + (insert "\n ")) + (prin1 face (current-buffer)))) + +(defun color-theme-reset-faces () + "Reset face settings for all faces returned by `color-theme-get-faces'." + (let ((faces (color-theme-get-faces)) + (face) (spec) (entry) + (frame (if color-theme-is-global nil (selected-frame)))) + (while faces + (setq entry (color-theme-spec (car faces))) + (setq face (nth 0 entry)) + (setq spec '((t (nil)))) + (setq faces (cdr faces)) + (if (functionp 'face-spec-reset-face) + (face-spec-reset-face face frame) + (face-spec-set face spec frame) + (if color-theme-is-global + (put face 'face-defface-spec spec)))))) + +(defun color-theme-print-theme (func doc params vars faces) + "Print a theme into the current buffer. +FUNC is the function name, DOC the doc string, PARAMS the +frame parameters, VARS the variable bindings, and FACES +the list of faces and their specs." + (insert "(defun " (symbol-name func) " ()\n" + " \"" doc "\"\n" + " (interactive)\n" + " (color-theme-install\n" + " '(" (symbol-name func)) + ;; alist of frame parameters + (color-theme-print-alist params) + ;; alist of variables + (color-theme-print-alist vars) + ;; remaining elements of snapshot: face specs + (color-theme-print-faces faces) + (insert ")))\n") + (insert "(add-to-list 'color-themes '(" (symbol-name func) " " + " \"THEME NAME\" \"YOUR NAME\"))") + (goto-char (point-min))) + +;;;###autoload +(defun color-theme-print (&optional buf) + "Print the current color theme function. + +You can contribute this function to or +paste it into your .emacs file and call it. That should recreate all +the settings necessary for your color theme. + +Example: + + \(require 'color-theme) + \(defun my-color-theme () + \"Color theme by Alex Schroeder, created 2000-05-17.\" + \(interactive) + \(color-theme-install + '(... + ... + ...))) + \(my-color-theme) + +If you want to use a specific color theme function, you can call the +color theme function in your .emacs directly. + +Example: + + \(require 'color-theme) + \(color-theme-gnome2)" + (interactive) + (message "Pretty printing current color theme function...") + (switch-to-buffer (if buf + buf + (get-buffer-create "*Color Theme*"))) + (unless buf + (setq buffer-read-only nil) + (erase-buffer)) + ;; insert defun + (insert "(eval-when-compile" + " (require 'color-theme))\n") + (color-theme-print-theme 'my-color-theme + (concat "Color theme by " + (if (string= "" user-full-name) + (user-login-name) + user-full-name) + ", created " (format-time-string "%Y-%m-%d") ".") + (color-theme-get-params) + (color-theme-get-vars) + (mapcar 'color-theme-spec (color-theme-get-faces))) + (unless buf + (emacs-lisp-mode)) + (goto-char (point-min)) + (message "Pretty printing current color theme function... done")) + +(defun color-theme-analyze-find-theme (code) + "Find the sexpr that calls `color-theme-install'." + (let (theme) + (while (and (not theme) code) + (when (eq (car code) 'color-theme-install) + (setq theme code)) + (when (listp (car code)) + (setq theme (color-theme-analyze-find-theme (car code)))) + (setq code (cdr code))) + theme)) + +;; (equal (color-theme-analyze-find-theme +;; '(defun color-theme-blue-eshell () +;; "Color theme for eshell faces only." +;; (color-theme-install +;; '(color-theme-blue-eshell +;; nil +;; (eshell-ls-archive-face ((t (:bold t :foreground "IndianRed")))) +;; (eshell-ls-backup-face ((t (:foreground "Grey")))))))) +;; '(color-theme-install +;; (quote +;; (color-theme-blue-eshell +;; nil +;; (eshell-ls-archive-face ((t (:bold t :foreground "IndianRed")))) +;; (eshell-ls-backup-face ((t (:foreground "Grey"))))))))) + +(defun color-theme-analyze-add-face (a b regexp faces) + "If only one of A or B are in FACES, the other is added, and FACES is returned. +If REGEXP is given, this is only done if faces contains a match for regexps." + (when (or (not regexp) + (catch 'found + (dolist (face faces) + (when (string-match regexp (symbol-name (car face))) + (throw 'found t))))) + (let ((face-a (assoc a faces)) + (face-b (assoc b faces))) + (if (and face-a (not face-b)) + (setq faces (cons (list b (nth 1 face-a)) + faces)) + (if (and (not face-a) face-b) + (setq faces (cons (list a (nth 1 face-b)) + faces)))))) + faces) + +;; (equal (color-theme-analyze-add-face +;; 'blue 'violet nil +;; '((blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t)))))) +;; '((violet ((t (:foreground "blue")))) +;; (blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t)))))) +;; (equal (color-theme-analyze-add-face +;; 'violet 'blue nil +;; '((blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t)))))) +;; '((violet ((t (:foreground "blue")))) +;; (blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t)))))) +;; (equal (color-theme-analyze-add-face +;; 'violet 'blue "foo" +;; '((blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t)))))) +;; '((blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t)))))) +;; (equal (color-theme-analyze-add-face +;; 'violet 'blue "blue" +;; '((blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t)))))) +;; '((violet ((t (:foreground "blue")))) +;; (blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t)))))) + +(defun color-theme-analyze-add-faces (faces) + "Add missing faces to FACES and return it." + ;; The most important thing is to add missing faces for the other + ;; editor. These are the most important faces to check. The + ;; following rules list two faces, A and B. If either of the two is + ;; part of the theme, the other must be, too. The optional third + ;; argument specifies a regexp. Only if an existing face name + ;; matches this regexp, is the rule applied. + (let ((rules '((font-lock-builtin-face font-lock-reference-face) + (font-lock-doc-face font-lock-doc-string-face) + (font-lock-constant-face font-lock-preprocessor-face) + ;; In Emacs 21 `modeline' is just an alias for + ;; `mode-line'. I recommend the use of + ;; `modeline' until further notice. + (modeline mode-line) + (modeline modeline-buffer-id) + (modeline modeline-mousable) + (modeline modeline-mousable-minor-mode) + (region primary-selection) + (region zmacs-region) + (font-lock-string-face dired-face-boring "^dired") + (font-lock-function-name-face dired-face-directory "^dired") + (default dired-face-executable "^dired") + (font-lock-warning-face dired-face-flagged "^dired") + (font-lock-warning-face dired-face-marked "^dired") + (default dired-face-permissions "^dired") + (default dired-face-setuid "^dired") + (default dired-face-socket "^dired") + (font-lock-keyword-face dired-face-symlink "^dired") + (tool-bar menu)))) + (dolist (rule rules) + (setq faces (color-theme-analyze-add-face + (nth 0 rule) (nth 1 rule) (nth 2 rule) faces)))) + ;; The `fringe' face defines what the left and right borders of the + ;; frame look like in Emacs 21. To give them default fore- and + ;; background colors, use (fringe ((t (nil)))) in your color theme. + ;; Usually it makes more sense to choose a color slightly lighter or + ;; darker from the default background. + (unless (assoc 'fringe faces) + (setq faces (cons '(fringe ((t (nil)))) faces))) + ;; The tool-bar should not be part of the frame-parameters, since it + ;; should not appear or disappear depending on the color theme. The + ;; apppearance of the toolbar, however, can be changed by the color + ;; theme. For Emacs 21, use the `tool-bar' face. The easiest way + ;; to do this is to give it the default fore- and background colors. + ;; This can be achieved using (tool-bar ((t (nil)))) in the theme. + ;; Usually it makes more sense, however, to provide the same colors + ;; as used in the `menu' face, and to specify a :box attribute. In + ;; order to alleviate potential Emacs/XEmacs incompatibilities, + ;; `toolbar' will be defined as an alias for `tool-bar' if it does + ;; not exist, and vice-versa. This is done eventhough the face + ;; `toolbar' seems to have no effect on XEmacs. If you look at + ;; XEmacs lisp/faces.el, however, you will find that it is in fact + ;; referenced for XPM stuff. + (unless (assoc 'tool-bar faces) + (setq faces (cons '(tool-bar ((t (nil)))) faces))) + ;; Move the default face back to the front, and sort the rest. + (unless (eq (caar faces) 'default) + (let ((face (assoc 'default faces))) + (setq faces (cons face + (sort (delete face faces) + (lambda (a b) + (string-lessp (car a) (car b)))))))) + faces) + +(defun color-theme-analyze-remove-heights (faces) + "Remove :height property where it is an integer and return FACES." + ;; I don't recommend making font sizes part of a color theme. Most + ;; users would be surprised to see their font sizes change when they + ;; install a color-theme. Therefore, remove all :height attributes + ;; if the value is an integer. If the value is a float, this is ok + ;; -- the value is relative to the default height. One notable + ;; exceptions is for a color-theme created for visually impaired + ;; people. These *must* use a larger font in order to be usable. + (let (result) + (dolist (face faces) + (let ((props (cadar (nth 1 face)))) + (if (and (plist-member props :height) + (integerp (plist-get props :height))) + (setq props (color-theme-plist-delete props :height) + result (cons (list (car face) `((t ,props))) + result)) + (setq result (cons face result))))) + (nreverse result))) + +;; (equal (color-theme-analyze-remove-heights +;; '((blue ((t (:foreground "blue" :height 2)))) +;; (bold ((t (:bold t :height 1.0)))))) +;; '((blue ((t (:foreground "blue")))) +;; (bold ((t (:bold t :height 1.0)))))) + +;;;###autoload +(defun color-theme-analyze-defun () + "Once you have a color-theme printed, check for missing faces. +This is used by maintainers who receive a color-theme submission +and want to make sure it follows the guidelines by the color-theme +author." + ;; The support for :foreground and :background attributes works for + ;; Emacs 20 and 21 as well as for XEmacs. :inverse-video is taken + ;; care of while printing color themes. + (interactive) + ;; Parse the stuff and find the call to color-theme-install + (save-excursion + (save-restriction + (narrow-to-defun) + ;; define the function + (eval-defun nil) + (goto-char (point-min)) + (let* ((code (read (current-buffer))) + (theme (color-theme-canonic + (eval + (cadr + (color-theme-analyze-find-theme + code))))) + (func (color-theme-function theme)) + (doc (documentation func t)) + (variables (color-theme-variables theme)) + (faces (color-theme-faces theme)) + (params (color-theme-frame-params theme))) + (setq faces (color-theme-analyze-remove-heights + (color-theme-analyze-add-faces faces))) + ;; Remove any variable bindings of faces that point to their + ;; symbol? Perhaps not, because another theme might want to + ;; change this, so it is important to be able to reset them. + ;; (let (result) + ;; (dolist (var variables) + ;; (unless (eq (car var) (cdr var)) + ;; (setq result (cons var result)))) + ;; (setq variables (nreverse result))) + ;; Now modify the theme directly. + (setq theme (color-theme-analyze-find-theme code)) + (setcdr (cadadr theme) (list params variables faces)) + (message "Pretty printing analysed color theme function...") + (with-current-buffer (get-buffer-create "*Color Theme*") + (setq buffer-read-only nil) + (erase-buffer) + ;; insert defun + (color-theme-print-theme func doc params variables faces) + (emacs-lisp-mode)) + (message "Pretty printing analysed color theme function... done") + (ediff-buffers (current-buffer) + (get-buffer "*Color Theme*")))))) + +;;; Creating a snapshot of the current color theme + +(defun color-theme-snapshot nil) + +;;;###autoload +(defun color-theme-make-snapshot () + "Return the definition of the current color-theme. +The function returned will recreate the color-theme in use at the moment." + (eval `(lambda () + "The color theme in use when the selection buffer was created. +\\[color-theme-select] creates the color theme selection buffer. At the +same time, this snapshot is created as a very simple undo mechanism. +The snapshot is created via `color-theme-snapshot'." + (interactive) + (color-theme-install + '(color-theme-snapshot + ;; alist of frame parameters + ,(color-theme-get-params) + ;; alist of variables + ,(color-theme-get-vars) + ;; remaining elements of snapshot: face specs + ,@(color-theme-get-face-definitions)))))) + + + +;;; Handling the various parts of a color theme install + +(defvar color-theme-frame-param-frobbing-rules + '((foreground-color default foreground) + (background-color default background)) + "List of rules to use when frobbing faces based on frame parameters. +This is only necessary for XEmacs, because in Emacs 21 changing the +frame paramters automatically affects the relevant faces.") + +;; fixme: silent the bytecompiler with set-face-property +(defun color-theme-frob-faces (params) + "Change certain faces according to PARAMS. +This uses `color-theme-frame-param-frobbing-rules'." + (dolist (rule color-theme-frame-param-frobbing-rules) + (let* ((param (nth 0 rule)) + (face (nth 1 rule)) + (prop (nth 2 rule)) + (val (cdr (assq param params))) + (frame (if color-theme-is-global nil (selected-frame)))) + (when val + (set-face-property face prop val frame))))) + +(defun color-theme-alist-reduce (old-list) + "Reduce OLD-LIST. +The resulting list will be newly allocated and will not contain any elements +with duplicate cars. This will speed the installation of new themes by +only installing unique attributes." + (let (new-list) + (dolist (elem old-list) + (when (not (assq (car elem) new-list)) + (setq new-list (cons elem new-list)))) + new-list)) + +(defun color-theme-install-frame-params (params) + "Change frame parameters using alist PARAMETERS. + +If `color-theme-is-global' is non-nil, all frames are modified using +`modify-frame-parameters' and the PARAMETERS are prepended to +`default-frame-alist'. The value of `initial-frame-alist' is not +modified. If `color-theme-is-global' is nil, only the selected frame is +modified. If `color-theme-is-cumulative' is nil, the frame parameters +are restored from `color-theme-original-frame-alist'. + +If the current frame parameters have a parameter `minibuffer' with +value `only', then the frame parameters are not installed, since this +indicates a dedicated minibuffer frame. + +Called from `color-theme-install'." + (setq params (color-theme-filter + params color-theme-legal-frame-parameters)) + ;; We have a new list in params now, therefore we may use + ;; destructive nconc. + (if color-theme-is-global + (let ((frames (frame-list))) + (if (or color-theme-is-cumulative + (null color-theme-original-frame-alist)) + (setq default-frame-alist + (append params (color-theme-alist default-frame-alist)) + minibuffer-frame-alist + (append params (color-theme-alist minibuffer-frame-alist))) + (setq default-frame-alist + (append params color-theme-original-frame-alist) + minibuffer-frame-alist + (append params (color-theme-alist minibuffer-frame-alist)))) + (setq default-frame-alist + (color-theme-alist-reduce default-frame-alist) + minibuffer-frame-alist + (color-theme-alist-reduce minibuffer-frame-alist)) + (dolist (frame frames) + (let ((params (if (eq 'only (cdr (assq 'minibuffer (frame-parameters frame)))) + minibuffer-frame-alist + default-frame-alist))) + (condition-case var + (modify-frame-parameters frame params) + (error (message "Error using params %S: %S" params var)))))) + (condition-case var + (modify-frame-parameters (selected-frame) params) + (error (message "Error using params %S: %S" params var)))) + (when color-theme-xemacs-p + (color-theme-frob-faces params))) + +;; (setq default-frame-alist (cons '(height . 30) default-frame-alist)) + +(defun color-theme-install-variables (vars) + "Change variables using alist VARS. +All variables matching `color-theme-legal-variables' are set. + +If `color-theme-is-global' and `color-theme-xemacs-p' are nil, variables +are made frame-local before setting them. Variables are set using `set' +in either case. This may lead to problems if changing the variable +requires the usage of the function specified with the :set tag in +defcustom declarations. + +Called from `color-theme-install'." + (let ((vars (color-theme-filter vars color-theme-legal-variables))) + (dolist (var vars) + (if (or color-theme-is-global color-theme-xemacs-p) + (set (car var) (cdr var)) + (make-variable-frame-local (car var)) + (modify-frame-parameters (selected-frame) (list var)))))) + +(defun color-theme-install-faces (faces) + "Change faces using FACES. + +Change faces for all frames and create any faces listed in FACES which +don't exist. The modified faces will be marked as \"unchanged from +its standard setting\". This is OK, since the changes made by +installing a color theme should never by saved in .emacs by +customization code. + +FACES should be a list where each entry has the form: + + (FACE SPEC) + +See `defface' for the format of SPEC. + +If `color-theme-is-global' is non-nil, faces are modified on all frames +using `face-spec-set'. If `color-theme-is-global' is nil, faces are +only modified on the selected frame. Non-existing faces are created +using `make-empty-face' in either case. If `color-theme-is-cumulative' +is nil, all faces are reset before installing the new faces. + +Called from `color-theme-install'." + ;; clear all previous faces + (when (not color-theme-is-cumulative) + (color-theme-reset-faces)) + ;; install new faces + (let ((faces (color-theme-filter faces color-theme-illegal-faces t)) + (frame (if color-theme-is-global nil (selected-frame)))) + (dolist (entry faces) + (let ((face (nth 0 entry)) + (spec (nth 1 entry))) + (or (facep face) + (make-empty-face face)) + ;; remove weird properties from the default face only + (when (eq face 'default) + (setq spec (color-theme-spec-filter spec))) + ;; Emacs/XEmacs customization issues: filter out :bold when + ;; the spec contains :weight, etc, such that the spec remains + ;; "valid" for custom. + (setq spec (color-theme-spec-compat spec)) + ;; using a spec of ((t (nil))) to reset a face doesn't work + ;; in Emacs 21, we use the new function face-spec-reset-face + ;; instead + (if (and (functionp 'face-spec-reset-face) + (equal spec '((t (nil))))) + (face-spec-reset-face face frame) + (condition-case var + (progn + (face-spec-set face spec frame) + (if color-theme-is-global + (put face 'face-defface-spec spec))) + (error (message "Error using spec %S: %S" spec var)))))))) + +;; `custom-set-faces' is unusable here because it doesn't allow to set +;; the faces for one frame only. + +;; Emacs `face-spec-set': If FRAME is nil, the face is created and +;; marked as a customized face. This is achieved by setting the +;; `face-defface-spec' property. If we don't, new frames will not be +;; created using the face we installed because `face-spec-set' is +;; broken: If given a FRAME of nil, it will not set the default faces; +;; instead it will walk through all the frames and set modify the faces. +;; If we do set a property (`saved-face' or `face-defface-spec'), +;; `make-frame' will correctly use the faces we defined with our color +;; theme. If we used the property `saved-face', +;; `customize-save-customized' will save all the faces installed as part +;; of a color-theme in .emacs. That's why we use the +;; `face-defface-spec' property. + + + +;;; Theme accessor functions, canonicalization, merging, comparing + +(defun color-theme-canonic (theme) + "Return the canonic form of THEME. +This deals with all the backwards compatibility stuff." + (let (function frame-params variables faces) + (when (functionp (car theme)) + (setq function (car theme) + theme (cdr theme))) + (setq frame-params (car theme) + theme (cdr theme)) + ;; optional variable defintions (for backwards compatibility) + (when (listp (caar theme)) + (setq variables (car theme) + theme (cdr theme))) + ;; face definitions + (setq faces theme) + (list function frame-params variables faces))) + +(defun color-theme-function (theme) + "Return function used to create THEME." + (nth 0 theme)) + +(defun color-theme-frame-params (theme) + "Return frame-parameters defined by THEME." + (nth 1 theme)) + +(defun color-theme-variables (theme) + "Return variables set by THEME." + (nth 2 theme)) + +(defun color-theme-faces (theme) + "Return faces defined by THEME." + (nth 3 theme)) + +(defun color-theme-merge-alists (&rest alists) + "Merges all the alist arguments into one alist. +Only the first instance of every key will be part of the resulting +alist. Membership will be tested using `assq'." + (let (result) + (dolist (l alists) + (dolist (entry l) + (unless (assq (car entry) result) + (setq result (cons entry result))))) + (nreverse result))) +;; (color-theme-merge-alists '((a . 1) (b . 2))) +;; (color-theme-merge-alists '((a . 1) (b . 2) (a . 3))) +;; (color-theme-merge-alists '((a . 1) (b . 2)) '((a . 3))) +;; (color-theme-merge-alists '((a . 1) (b . 2)) '((c . 3))) +;; (color-theme-merge-alists '((a . 1) (b . 2)) '((c . 3) (d . 4))) +;; (color-theme-merge-alists '((a . 1) (b . 2)) '((c . 3) (d . 4) (b . 5))) + +;;;###autoload +(defun color-theme-compare (theme-a theme-b) + "Compare two color themes. +This will print the differences between installing THEME-A and +installing THEME-B. Note that the order is important: If a face is +defined in THEME-A and not in THEME-B, then this will not show up as a +difference, because there is no reset before installing THEME-B. If a +face is defined in THEME-B and not in THEME-A, then this will show up as +a difference." + (interactive + (list + (intern + (completing-read "Theme A: " + (mapcar (lambda (i) (list (symbol-name (car i)))) + color-themes) + (lambda (i) (string-match "color-theme" (car i))))) + (intern + (completing-read "Theme B: " + (mapcar (lambda (i) (list (symbol-name (car i)))) + color-themes) + (lambda (i) (string-match "color-theme" (car i))))))) + ;; install the themes in a new frame and get the definitions + (let ((color-theme-is-global nil)) + (select-frame (make-frame)) + (funcall theme-a) + (setq theme-a (list theme-a + (color-theme-get-params) + (color-theme-get-vars) + (color-theme-get-face-definitions))) + (funcall theme-b) + (setq theme-b (list theme-b + (color-theme-get-params) + (color-theme-get-vars) + (color-theme-get-face-definitions))) + (delete-frame)) + (let ((params (set-difference + (color-theme-frame-params theme-b) + (color-theme-frame-params theme-a) + :test 'equal)) + (vars (set-difference + (color-theme-variables theme-b) + (color-theme-variables theme-a) + :test 'equal)) + (faces (set-difference + (color-theme-faces theme-b) + (color-theme-faces theme-a) + :test 'equal))) + (list 'diff + params + vars + faces))) + + + +;;; Installing a color theme +;;;###autoload +(defun color-theme-install (theme) + "Install a color theme defined by frame parameters, variables and faces. + +The theme is installed for all present and future frames; any missing +faces are created. See `color-theme-install-faces'. + +THEME is a color theme definition. See below for more information. + +If you want to install a color theme from your .emacs, use the output +generated by `color-theme-print'. This produces color theme function +which you can copy to your .emacs. + +A color theme definition is a list: +\([FUNCTION] FRAME-PARAMETERS VARIABLE-SETTINGS FACE-DEFINITIONS) + +FUNCTION is the color theme function which called `color-theme-install'. +This is no longer used. There was a time when this package supported +automatic factoring of color themes. This has been abandoned. + +FRAME-PARAMETERS is an alist of frame parameters. These are installed +with `color-theme-install-frame-params'. These are installed last such +that any changes to the default face can be changed by the frame +parameters. + +VARIABLE-DEFINITIONS is an alist of variable settings. These are +installed with `color-theme-install-variables'. + +FACE-DEFINITIONS is an alist of face definitions. These are installed +with `color-theme-install-faces'. + +If `color-theme-is-cumulative' is nil, a color theme will undo face and +frame-parameter settings of previous color themes." + (setq theme (color-theme-canonic theme)) + (color-theme-install-variables (color-theme-variables theme)) + (color-theme-install-faces (color-theme-faces theme)) + ;; frame parameters override faces + (color-theme-install-frame-params (color-theme-frame-params theme)) + (when color-theme-history-max-length + (color-theme-add-to-history + (car theme)))) + + + +;; Sharing your stuff +;;;###autoload +(defun color-theme-submit () + "Submit your color-theme to the maintainer." + (interactive) + (require 'reporter) + (let ((reporter-eval-buffer (current-buffer)) + final-resting-place + after-sep-pos + (reporter-status-message "Formatting buffer...") + (reporter-status-count 0) + (problem "Yet another color-theme") + (agent (reporter-compose-outgoing)) + (mailbuf (current-buffer)) + hookvar) + ;; do the work + (require 'sendmail) + ;; If mailbuf did not get made visible before, make it visible now. + (let (same-window-buffer-names same-window-regexps) + (pop-to-buffer mailbuf) + ;; Just in case the original buffer is not visible now, bring it + ;; back somewhere + (and pop-up-windows (display-buffer reporter-eval-buffer))) + (goto-char (point-min)) + (mail-position-on-field "to") + (insert color-theme-maintainer-address) + (mail-position-on-field "subject") + (insert problem) + ;; move point to the body of the message + (mail-text) + (setq after-sep-pos (point)) + (unwind-protect + (progn + (setq final-resting-place (point-marker)) + (goto-char final-resting-place)) + (color-theme-print (current-buffer)) + (goto-char final-resting-place) + (insert "\n\n") + (goto-char final-resting-place) + (insert "Hello there!\n\nHere's my color theme named: ") + (set-marker final-resting-place nil)) + ;; compose the minibuf message and display this. + (let* ((sendkey-whereis (where-is-internal + (get agent 'sendfunc) nil t)) + (abortkey-whereis (where-is-internal + (get agent 'abortfunc) nil t)) + (sendkey (if sendkey-whereis + (key-description sendkey-whereis) + "C-c C-c")); TBD: BOGUS hardcode + (abortkey (if abortkey-whereis + (key-description abortkey-whereis) + "M-x kill-buffer"))); TBD: BOGUS hardcode + (message "Enter a message and type %s to send or %s to abort." + sendkey abortkey)))) + + + +;; Use this to define themes +(defmacro define-color-theme (name author description &rest forms) + (let ((n name)) + `(progn + (add-to-list 'color-themes + (list ',n + (upcase-initials + (replace-in-string + (replace-in-string + (symbol-name ',n) "^color-theme-" "") "-" " ")) + ,author)) + (defun ,n () + ,description + (interactive) + ,@forms)))) + + +;;; FIXME: is this useful ?? +;;;###autoload +(defun color-theme-initialize () + "Initialize the color theme package by loading color-theme-libraries." + (interactive) + + (cond ((and (not color-theme-load-all-themes) + color-theme-directory) + (setq color-theme-libraries + (directory-files color-theme-directory t "^color-theme"))) + (color-theme-directory + (push (cdr (directory-files color-theme-directory t "^color-theme")) + color-theme-libraries))) + (dolist (library color-theme-libraries) + (load library))) + +(when nil + (setq color-theme-directory "themes/" + color-theme-load-all-themes nil) + (color-theme-initialize) +) +;; TODO: I don't like all those function names cluttering up my namespace. +;; Instead, a hashtable for the color-themes should be created. Now that +;; define-color-theme is around, it should be easy to change in just the +;; one place. + + +(provide 'color-theme) + +;;; color-theme.el ends here diff --git a/.emacs.d/csharp-mode.el b/.emacs.d/csharp-mode.el new file mode 100644 index 0000000..9cd7914 --- /dev/null +++ b/.emacs.d/csharp-mode.el @@ -0,0 +1,1977 @@ +;;; csharp-mode.el --- C# mode derived mode + +;; Author: Dylan R. E. Moonfire +;; Maintainer: Dylan R. E. Moonfire +;; Created: Feburary 2005 +;; Modified: February 2010 +;; Version: 0.7.4 - Dino Chiesa +;; Keywords: c# languages oop mode + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2 of the License, or +;; (at your option) any later version. +;; +;; 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 +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: +;; +;; This is a separate mode to implement the C# constructs and +;; font-locking. It is based on the java-mode example from cc-mode. +;; +;; csharp-mode requires CC Mode 5.30 or later. It works with +;; cc-mode 5.31.3, which is current at this time. +;; +;; Features: +;; +;; - font-lock and indent of C# syntax including: +;; all c# keywords and major syntax +;; attributes that decorate methods, classes, fields, properties +;; enum types +;; #if/#endif #region/#endregion +;; instance initializers +;; anonymous functions and methods +;; verbatim literal strings (those that begin with @) +;; generics +;; +;; - automagic code-doc generation when you type three slashes. +;; +;; - intelligent inserttion of matched pairs of curly braces. +;; +;; - sets the compiler regex for next-error, for csc.exe output. +;; +;; + + +;;; To use: +;; +;; put this in your .emacs: +;; +;; (autoload 'csharp-mode "csharp-mode" "Major mode for editing C# code." t) +;; +;; or: +;; +;; (require 'csharp-mode) +;; +;; +;; AND: +;; +;; (setq auto-mode-alist +;; (append '(("\\.cs$" . csharp-mode)) auto-mode-alist)) +;; (defun my-csharp-mode-fn () +;; "function that runs when csharp-mode is initialized for a buffer." +;; ...insert your code here... +;; ...most commonly, your custom key bindings ... +;; ) +;; (add-hook 'csharp-mode-hook 'my-csharp-mode-fn t) +;; +;; + + +;;; Bugs: +;; +;; Namespaces in the using statements are not fontified. Should do in +;; c-basic-matchers-before or c-basic-matchers-after. +;; +;; Method names with a preceding attribute are not fontified. +;; +;; Field/Prop names inside object initializers are fontified only +;; if the null constructor is used, with no parens. +;; +;; This code doesn't seem to work when you compile it, then +;; load/require in the emacs file. You will get an error (error +;; "`c-lang-defconst' must be used in a file") which happens because +;; cc-mode doesn't think it is in a buffer while loading directly +;; from the init. However, if you call it based on a file extension, +;; it works properly. Interestingly enough, this doesn't happen if +;; you don't byte-compile cc-mode. +;; +;; +;; +;; Todo: +;; +;; Get csharp-mode.el accepted as part of the emacs standard distribution. +;; Must contact monnier at iro.umontreal.ca to make this happen. +;; +;; +;; +;; Acknowledgements: +;; +;; Thanks to Alan Mackenzie and Stefan Monnier for answering questions +;; and making suggestions. +;; +;; + +;;; Versions: +;; +;; 0.1.0 - Initial release. +;; 0.2.0 - Fixed the identification on the "enum" keyword. +;; - Fixed the font-lock on the "base" keyword +;; 0.3.0 - Added a regex to fontify attributes. It isn't the +;; the best method, but it handles single-like attributes +;; well. +;; - Got "super" not to fontify as a keyword. +;; - Got extending classes and interfaces to fontify as something. +;; 0.4.0 - Removed the attribute matching because it broke more than +;; it fixed. +;; - Corrected a bug with namespace not being properly identified +;; and treating the class level as an inner object, which screwed +;; up formatting. +;; - Added "partial" to the keywords. +;; 0.5.0 - Found bugs with compiled cc-mode and loading from init files. +;; - Updated the eval-when-compile to code to let the mode be +;; compiled. +;; 0.6.0 - Added the c-filter-ops patch for 5.31.1 which made that +;; function in cc-langs.el unavailable. +;; - Added a csharp-lineup-region for indention #region and +;; #endregion block differently. +;; 0.7.0 - Added autoload so update-directory-autoloads works +;; (Thank you, Nikolaj Schumacher) +;; - Fontified the entire #region and #endregion lines. +;; - Initial work to get get, set, add, remove font-locked. +;; 0.7.1 - Added option to indent #if/endif with code +;; - Fixed c-opt-cpp-prefix defn (it must not include the BOL +;; char (^). +;; - proper fontification and indent of classes that inherit +;; (previously the colon was confusing the parser) +;; - reclassified namespace as a block beginner +;; - removed $ as a legal symbol char - not legal in C#. +;; - added struct to c-class-decl-kwds so indent is correct +;; within a struct. +;; 0.7.2 - Added automatic codedoc insertion. +;; 0.7.3 - Instance initializers (new Type { ... } ) and +;; (new Type() { ...} ) are now indented properly. +;; - proper fontification and indent of enums as brace-list-*, +;; including special treatment for enums that explicitly +;; inherit from an int type. Previously the colon was +;; confusing the parser. +;; - proper fontification of verbatim literal strings, +;; including those that end in slash. This edge case was not +;; handled at all before; it is now handled correctly. +;; - code cleanup and organization; removed the linefeed. +;; - intelligent curly-brace insertion +;; 0.7.4 - added a C# style +;; - using is now a keyword and gets fontified +;; - fixed a bug that had crept into the codedoc insertion +;; + + +(require 'cc-mode) + +(message (concat "Loading " load-file-name)) + + +;; ================================================================== +;; c# upfront stuff +;; ================================================================== + +;; This is a copy of the function in cc-mode which is used to handle +;; the eval-when-compile which is needed during other times. +(defun c-filter-ops (ops opgroup-filter op-filter &optional xlate) + ;; See cc-langs.el, a direct copy. + (unless (listp (car-safe ops)) + (setq ops (list ops))) + (cond ((eq opgroup-filter t) + (setq opgroup-filter (lambda (opgroup) t))) + ((not (functionp opgroup-filter)) + (setq opgroup-filter `(lambda (opgroup) + (memq opgroup ',opgroup-filter))))) + (cond ((eq op-filter t) + (setq op-filter (lambda (op) t))) + ((stringp op-filter) + (setq op-filter `(lambda (op) + (string-match ,op-filter op))))) + (unless xlate + (setq xlate 'identity)) + (c-with-syntax-table (c-lang-const c-mode-syntax-table) + (delete-duplicates + (mapcan (lambda (opgroup) + (when (if (symbolp (car opgroup)) + (when (funcall opgroup-filter (car opgroup)) + (setq opgroup (cdr opgroup)) + t) + t) + (mapcan (lambda (op) + (when (funcall op-filter op) + (let ((res (funcall xlate op))) + (if (listp res) res (list res))))) + opgroup))) + ops) + :test 'equal))) + + + +;; These are only required at compile time to get the sources for the +;; language constants. (The cc-fonts require and the font-lock +;; related constants could additionally be put inside an +;; (eval-after-load "font-lock" ...) but then some trickery is +;; necessary to get them compiled.) +(eval-when-compile + (let ((load-path + (if (and (boundp 'byte-compile-dest-file) + (stringp byte-compile-dest-file)) + (cons (file-name-directory byte-compile-dest-file) load-path) + load-path))) + (load "cc-mode" nil t) + (load "cc-fonts" nil t) + (load "cc-langs" nil t))) + +(eval-and-compile + ;; Make our mode known to the language constant system. Use Java + ;; mode as the fallback for the constants we don't change here. + ;; This needs to be done also at compile time since the language + ;; constants are evaluated then. + (c-add-language 'csharp-mode 'java-mode)) + +;; ================================================================== +;; end of c# upfront stuff +;; ================================================================== + + + + + +;; ================================================================== +;; csharp-mode utility and feature defuns +;; ================================================================== + +;; Indention: csharp-mode follows normal indention rules except for +;; when indenting the #region and #endregion blocks. This function +;; defines a custom indention to indent the #region blocks properly +;; + +(defun csharp-lineup-region (langelem) + "Indent all #region and #endregion blocks inline with code while +retaining normal column-zero indention for #if and the other +processing blocks. + +To use this indenting just put the following in your emacs file: + (c-set-offset 'cpp-macro 'csharp-lineup-region) + +An alternative is to use `csharp-lineup-if-and-region'. +" + + (save-excursion + (back-to-indentation) + (if (re-search-forward "#\\(end\\)?region" (c-point 'eol) [0]) 0 [0]))) + + + +(defun csharp-lineup-if-and-region (langelem) + +"Indent all #region/endregion blocks and #if/endif blocks inline +with code while retaining normal column-zero indention for any +other processing blocks. + +To use this indenting just put the following in your emacs file: + (c-set-offset 'cpp-macro 'csharp-lineup-if-and-region) + +Another option is to use `csharp-lineup-region'. + +" + (save-excursion + (back-to-indentation) + (if (re-search-forward "#\\(\\(end\\)?\\(if\\|region\\)\\|else\\)" (c-point 'eol) [0]) 0 [0]))) + + + + + +(defun csharp-insert-open-brace () + "Intelligently insert a pair of curly braces. This fn is most +often bound to the open-curly brace, with + + (local-set-key (kbd \"{\") 'csharp-insert-open-brace) + +The default binding for an open curly brace in cc-modes is often +`c-electric-brace' or `skeleton-pair-insert-maybe'. The former +can be configured to insert newlines around braces in various +syntactic positions. The latter inserts a pair of braces and +then does not insert a newline, and does not indent. + +This fn provides another option, with some additional +intelligence for csharp-mode. When you type an open curly, the +appropriate pair of braces appears, with spacing and indent set +in a context-sensitive manner. + +Within a string literal, you just get a pair of braces, and point +is set between them. Following an equals sign, you get a pair of +braces, with a semincolon appended. Otherwise, you +get the open brace on a new line, with the closing brace on the +line following. + +There may be another way to get this to happen appropriately just within emacs, +but I could not figure out how to do it. So I wrote this alternative. +" + (interactive) + (let + (tpoint + (in-string (string= (csharp-in-literal) "string")) + (preceding3 + (save-excursion + (and + (skip-chars-backward " ") + (> (- (point) 2) (point-min)) + (buffer-substring-no-properties (point) (- (point) 3))))) + (one-word-back + (save-excursion + (backward-word 2) + (thing-at-point 'word)))) + + (cond + + ;; Case 1: inside a string literal? + ;; -------------------------------------------- + ;; If so, then just insert a pair of braces and put the point + ;; between them. The most common case is a format string for + ;; String.Format() or Console.WriteLine(). + (in-string + (self-insert-command 1) + (insert "}") + (backward-char)) + + ;; Case 2: the open brace starts an array initializer. + ;; -------------------------------------------- + ;; When the last non-space was an equals sign or square brackets, + ;; then it's an initializer. + ((save-excursion + (backward-sexp) + (looking-at "\\(\\w+\\b *=\\|[[]]+\\)")) + (self-insert-command 1) + (insert " };") + (backward-char 3)) + + ;; Case 3: the open brace starts an instance initializer + ;; -------------------------------------------- + ;; If one-word-back was "new", then it's an object initializer. + ((string= one-word-back "new") + (save-excursion + (message "object initializer") + (setq tpoint (point)) ;; prepare to indent-region later + (newline) + (self-insert-command 1) + (newline-and-indent) + (newline) + (insert "};") + (c-indent-region tpoint (point)) + (previous-line) + (indent-according-to-mode) + (end-of-line) + (setq tpoint (point))) + (goto-char tpoint)) + + ;; Case 4: a lambda initialier. + ;; -------------------------------------------- + ;; If the open curly follows =>, then it's a lambda initializer. + ((string= (substring preceding3 -2) "=>") + (message "lambda init") + (self-insert-command 1) + (insert " }") + (backward-char 2)) + + ;; else, it's a new scope. (if, while, class, etc) + (t + (save-excursion + (message "new scope") + (set-mark (point)) ;; prepare to indent-region later + ;; check if the prior sexp is on the same line + (if (save-excursion + (let ((curline (line-number-at-pos)) + (aftline (progn + (backward-sexp) + (line-number-at-pos)))) + (= curline aftline))) + (newline-and-indent)) + (self-insert-command 1) + (c-indent-line-or-region) + (end-of-line) + (newline) + (insert "}") + ;;(c-indent-command) ;; not sure of the difference here + (c-indent-line-or-region) + (previous-line) + (end-of-line) + (newline-and-indent) + ;; point ends up on an empty line, within the braces, properly indented + (setq tpoint (point))) + + (goto-char tpoint))))) + + + + +;; ================================================================== +;; end of csharp-mode utility and feature defuns +;; ================================================================== + + + + + + +;; ================================================================== +;; c# values for "language constants" defined in cc-langs.el +;; ================================================================== + + +;; Java uses a series of regexes to change the font-lock for class +;; references. The problem comes in because Java uses Pascal (leading +;; space in names, SomeClass) for class and package names, but +;; Camel-casing (initial lowercase, upper case in words, +;; i.e. someVariable) for variables. The notation suggested by EMCA for C# is +;; to use Pascal notation for everything, except inner variables. So, +;; the Java regex and formatting produces very wrong results in C#. +;;(error (byte-compile-dest-file)) +;;(error (c-get-current-file)) +(c-lang-defconst c-opt-after-id-concat-key + csharp (if (c-lang-const c-opt-identifier-concat-key) + (c-lang-const c-symbol-start))) + +(c-lang-defconst c-basic-matchers-before + csharp `( + ;;;; Font-lock the attributes by searching for the + ;;;; appropriate regex and marking it as TODO. + ;;,`(,(concat "\\(" csharp-attribute-regex "\\)") + ;; 0 font-lock-function-name-face) + + ;; Put a warning face on the opener of unclosed strings that + ;; can't span lines. Later font + ;; lock packages have a `font-lock-syntactic-face-function' for + ;; this, but it doesn't give the control we want since any + ;; fontification done inside the function will be + ;; unconditionally overridden. + ,(c-make-font-lock-search-function + ;; Match a char before the string starter to make + ;; `c-skip-comments-and-strings' work correctly. + (concat ".\\(" c-string-limit-regexp "\\)") + '((c-font-lock-invalid-string))) + + ;; Fontify keyword constants. + ,@(when (c-lang-const c-constant-kwds) + (let ((re (c-make-keywords-re nil + (c-lang-const c-constant-kwds)))) + `((eval . (list ,(concat "\\<\\(" re "\\)\\>") + 1 c-constant-face-name))))) + + ;; Fontify all keywords except the primitive types. + ,`(,(concat "\\<" (c-lang-const c-regular-keywords-regexp)) + 1 font-lock-keyword-face) + + ;; Fontify leading identifiers in fully qualified names like + ;; "Foo.Bar". + ,@(when (c-lang-const c-opt-identifier-concat-key) + `((,(byte-compile + `(lambda (limit) + (while (re-search-forward + ,(concat "\\(\\<" ; 1 + "\\(" (c-lang-const c-symbol-key) + "\\)" ; 2 + "[ \t\n\r\f\v]*" + (c-lang-const + c-opt-identifier-concat-key) + "[ \t\n\r\f\v]*" + "\\)" + "\\(" + (c-lang-const + c-opt-after-id-concat-key) + "\\)") + limit t) + (unless (progn + (goto-char (match-beginning 0)) + (c-skip-comments-and-strings limit)) + (or (get-text-property (match-beginning 2) 'face) + (c-put-font-lock-face (match-beginning 2) + (match-end 2) + c-reference-face-name)) + (goto-char (match-end 1))))))))) + )) + + + +;; C# does not allow a leading qualifier operator. It also doesn't +;; allow the ".*" construct of Java. So, we redo this regex without +;; the "\\|\\*" regex. +(c-lang-defconst c-identifier-key + csharp (concat "\\(" (c-lang-const c-symbol-key) "\\)" ; 1 + (concat "\\(" + "[ \t\n\r\f\v]*" + (c-lang-const c-opt-identifier-concat-key) + "[ \t\n\r\f\v]*" + (concat "\\(" + "\\(" (c-lang-const c-symbol-key) "\\)" + "\\)") + "\\)*"))) + +;; C# has a few rules that are slightly different than Java for +;; operators. This also removed the Java's "super" and replaces it +;; with the C#'s "base". +(c-lang-defconst c-operators + csharp `((prefix "base"))) + + +;; C# uses CPP-like prefixes to mark #define, #region/endregion, +;; #if/else/endif, and #pragma. This regexp matches the prefix, +;; not including the beginning-of-line (BOL), and not including +;; the term after the prefix (define, pragma, etc). This regexp says +;; whitespace, followed by the prefix, followed by maybe more whitespace. + +(c-lang-defconst c-opt-cpp-prefix + csharp "\\s *#\\s *") + + +;; there are no message directives in C# +(c-lang-defconst c-cpp-message-directives + csharp nil) + +(c-lang-defconst c-cpp-expr-directives + csharp '("if")) + +(c-lang-defconst c-opt-cpp-macro-define + csharp "define") + +;; $ is not a legal char in an identifier in C#. So we need to +;; create a csharp-specific definition of this constant. +(c-lang-defconst c-symbol-chars + csharp (concat c-alnum "_")) + + +(c-lang-defconst c-colon-type-list-kwds + csharp '("class")) + +(c-lang-defconst c-block-prefix-disallowed-chars + + ;; Allow ':' for inherit list starters. + csharp (set-difference (c-lang-const c-block-prefix-disallowed-chars) + '(?: ?,))) + + +(c-lang-defconst c-assignment-operators + csharp '("=" "*=" "/=" "%=" "+=" "-=" ">>=" "<<=" "&=" "^=" "|=")) + +(c-lang-defconst c-primitive-type-kwds + ;; ECMA-344, S8 + csharp '("object" "string" "sbyte" "short" "int" "long" "byte" + "ushort" "uint" "ulong" "float" "double" "bool" "char" + "decimal" "void")) + +;; The keywords that define that the following is a type, such as a +;; class definition. +(c-lang-defconst c-type-prefix-kwds + ;; ECMA-344, S? + csharp '("class" "interface" "struct")) ;; no enum here. + ;; we want enum to be a brace list. + + +;; Type modifier keywords. They appear anywhere in types, but modify +;; instead of create one. +(c-lang-defconst c-type-modifier-kwds + ;; EMCA-344, S? + csharp '("readonly" "const")) + + +;; Tue, 20 Apr 2010 16:02 +;; need to vverify that this works for lambdas... +(c-lang-defconst c-special-brace-lists + csharp '((?{ . ?}) )) + + + +;; dinoch +;; Thu, 22 Apr 2010 18:54 +;; +;; No idea why this isn't getting set properly in the first place. +;; In cc-langs.el, it is set to the union of a bunch of things, none +;; of which include "new", or "enum". +;; +;; But somehow both of those show up in the resulting derived regexp. +;; This breaks indentation of instance initializers, such as +;; +;; var x = new Foo { ... }; +;; +;; Based on my inspection, the existing c-lang-defconst should work! +;; I don't know how to fix this c-lang-defconst, so I am re-setting this +;; variable here, to provide the regex explicitly. +;; +(c-lang-defconst c-decl-block-key + + csharp '"\\(namespace\\)\\([^[:alnum:]_]\\|$\\)\\|\\(class\\|interface\\|struct\\)\\([^[:alnum:]_]\\|$\\)" + ) + + + +;; Thu, 22 Apr 2010 14:29 +;; I want this to handle var x = new Foo[] { ... }; +;; not sure if necessary. +(c-lang-defconst c-inexpr-brace-list-kwds + csharp '("new")) + + +;; ;;(c-lang-defconst c-inexpr-class-kwds +;; ;; csharp '("new")) + + + +(c-lang-defconst c-class-decl-kwds + ;; EMCA-344, S? + csharp '("class" "interface" "struct" )) ;; no "enum"!! + + +;; The various modifiers used for class and method descriptions. +(c-lang-defconst c-modifier-kwds + csharp '("public" "partial" "private" "const" "abstract" + "protected" "ref" "out" "static" "virtual" + "override" "params" "internal")) + + +;; Thu, 22 Apr 2010 23:02 +;; Based on inspection of the cc-mode code, the c-protection-kwds +;; c-lang-const is used only for objective-c. So the value is +;; irrelevant for csharp. +(c-lang-defconst c-protection-kwds + csharp nil + ;; csharp '("private" "protected" "public" "internal") +) + + +;; Define the keywords that can have something following after them. +(c-lang-defconst c-type-list-kwds + csharp '("struct" "class" "interface" "is" "as" + "delegate" "event" "set" "get" "add" "remove")) + + +;; This allows the classes after the : in the class declartion to be +;; fontified. +(c-lang-defconst c-typeless-decl-kwds + csharp '(":")) + +;; Sets up the enum to handle the list properly, and also the new +;; keyword to handle object initializers. This requires a modified +;; c-basic-matchers-after (see above) in order to correctly fontify C# +;; 3.0 object initializers. +(c-lang-defconst c-brace-list-decl-kwds + csharp '("enum" "new")) + + +;; Statement keywords followed directly by a substatement. +;; catch is not one of them. +(c-lang-defconst c-block-stmt-1-kwds + csharp '("do" "try" "finally")) + + +;; Statement keywords followed by a paren sexp and then by a substatement. +(c-lang-defconst c-block-stmt-2-kwds + csharp '("for" "if" "switch" "while" "catch" "foreach" "using" + "checked" "unchecked" "lock")) + + +;; Statements that break out of braces +(c-lang-defconst c-simple-stmt-kwds + csharp '("return" "continue" "break" "throw" "goto" )) + +;; Statements that allow a label +;; TODO? +(c-lang-defconst c-before-label-kwds + csharp nil) + +;; Constant keywords +(c-lang-defconst c-constant-kwds + csharp '("true" "false" "null")) + +;; Keywords that start "primary expressions." +(c-lang-defconst c-primary-expr-kwds + csharp '("this" "base")) + +;; Treat namespace as an outer block so class indenting +;; works properly. +(c-lang-defconst c-other-block-decl-kwds + csharp '("namespace")) + +(c-lang-defconst c-other-kwds + csharp '("in" "sizeof" "typeof" "is" "as" "yield" + "where" "select" "from")) + +(c-lang-defconst c-overloadable-operators + ;; EMCA-344, S14.2.1 + csharp '("+" "-" "*" "/" "%" "&" "|" "^" + "<<" ">>" "==" "!=" ">" "<" ">=" "<=")) + + +;; This c-cpp-matchers stuff is used for fontification. +;; see cc-font.el +;; + +;; There's no preprocessor in C#, but there are still compiler +;; directives to fontify: "#pragma", #region/endregion, #define, #undef, +;; #if/else/endif. (The definitions for the extra keywords above are +;; enough to incorporate them into the fontification regexps for types +;; and keywords, so no additional font-lock patterns are required for +;; keywords.) + +(c-lang-defconst c-cpp-matchers + csharp (cons + ;; Use the eval form for `font-lock-keywords' to be able to use + ;; the `c-preprocessor-face-name' variable that maps to a + ;; suitable face depending on the (X)Emacs version. + '(eval . (list "^\\s *\\(#pragma\\|undef\\|define\\)\\>\\(.*\\)" + (list 1 c-preprocessor-face-name) + '(2 font-lock-string-face))) + ;; There are some other things in `c-cpp-matchers' besides the + ;; preprocessor support, so include it. + (c-lang-const c-cpp-matchers))) + +(defcustom csharp-font-lock-extra-types nil + "*List of extra types (aside from the type keywords) to recognize in C# mode. +Each list item should be a regexp matching a single identifier." + :type 'list :group 'csharp) + +(defconst csharp-font-lock-keywords-1 (c-lang-const c-matchers-1 csharp) + "Minimal highlighting for C# mode.") + +(defconst csharp-font-lock-keywords-2 (c-lang-const c-matchers-2 csharp) + "Fast normal highlighting for C# mode.") + +(defconst csharp-font-lock-keywords-3 (c-lang-const c-matchers-3 csharp) + "Accurate normal highlighting for C# mode.") + +(defvar csharp-font-lock-keywords csharp-font-lock-keywords-3 + "Default expressions to highlight in C# mode.") + +(defvar csharp-mode-syntax-table nil + "Syntax table used in csharp-mode buffers.") +(or csharp-mode-syntax-table + (setq csharp-mode-syntax-table + (funcall (c-lang-const c-make-mode-syntax-table csharp)))) + +(defvar csharp-mode-abbrev-table nil + "Abbreviation table used in csharp-mode buffers.") +(c-define-abbrev-table 'csharp-mode-abbrev-table + ;; Keywords that if they occur first on a line might alter the + ;; syntactic context, and which therefore should trig reindentation + ;; when they are completed. + '(("else" "else" c-electric-continued-statement 0) + ("while" "while" c-electric-continued-statement 0) + ("catch" "catch" c-electric-continued-statement 0) + ("finally" "finally" c-electric-continued-statement 0))) + +(defvar csharp-mode-map (let ((map (c-make-inherited-keymap))) + ;; Add bindings which are only useful for C# + map) + "Keymap used in csharp-mode buffers.") + + +;; TODO +;; Defines our constant for finding attributes. +;;(defconst csharp-attribute-regex "\\[\\([XmlType]+\\)(") +;;(defconst csharp-attribute-regex "\\[\\(.\\)") +;; This doesn't work because the string regex happens before this point +;; and getting the font-locking to work before and after is fairly difficult +;;(defconst csharp-attribute-regex +;; (concat +;; "\\[[a-zA-Z][ \ta-zA-Z0-9.]+" +;; "\\((.*\\)?" +;;)) + + +;; ================================================================== +;; end of c# values for "language constants" defined in cc-langs.el +;; ================================================================== + + + + +;; ================================================================== +;; C# code-doc insertion magic +;; ================================================================== +;; +;; In Visual Studio, if you type three slashes, it immediately expands into +;; an inline code-documentation fragment. The following method does the +;; same thing. +;; +;; This is the kind of thing that could be handled by YASnippet or +;; another similarly flexible snippet framework. But I don't want to +;; introduce a dependency on yasnippet to csharp-mode. So the capability +;; must live within csharp-mode itself. + +(defun csharp-maybe-insert-codedoc (arg) + + "Insert an xml code documentation template as appropriate, when +typing slashes. This fn gets bound to / (the slash key), in +csharp-mode. If the slash being inserted is not the third +consecutive slash, the slash is inserted as normal. If it is the +third consecutive slash, then a xml code documentation template +may be inserted in some cases. For example, + + a template is inserted if the prior line is empty, + or contains only an open curly brace; + a template is inserted if the prior word + closes the element; + a template is inserted if the prior word + closes the element; + an template is inserted if the prior word closes + the element; + a template is inserted if the prior word closes + a element. + +In all other cases the slash is inserted as normal. + +If you want the default cc-mode behavior, which implies no automatic +insertion of xml code documentation templates, then use this in +your `csharp-mode-hook' function: + + (local-set-key (kbd \"/\") 'c-electric-slash) + + " + (interactive "*p") + ;;(message "csharp-maybe-insert-codedoc") + (let ( + (cur-point (point)) + (char last-command-char) + (cb0 (char-before (- (point) 0))) + (cb1 (char-before (- (point) 1))) + is-first-non-whitespace + did-auto-insert + ) + + ;; check if two prior chars were slash + (if (and + (= char ?/) + cb0 (= ?/ cb0) + cb1 (= ?/ cb1) + ) + + (progn + ;;(message "yes - this is the third consecutive slash") + (setq is-first-non-whitespace + (save-excursion + (back-to-indentation) + (= cur-point (+ (point) 2)))) + + (if is-first-non-whitespace + ;; This is a 3-slash sequence. It is the first non-whitespace text + ;; on the line. Now we need to examine the surrounding context + ;; in order to determine which xml cod doc template to insert. + (let (word-back char0 char1 + word-fore char-0 char-1 + text-to-insert ;; text to insert in lieu of slash + fn-to-call ;; func to call after inserting text + (preceding-line-is-empty (or + (= (line-number-at-pos) 1) + (save-excursion + (previous-line) + (beginning-of-line) + (looking-at "[ \t]*$\\|[ \t]*{[ \t]*$")))) + (flavor 0) ;; used only for diagnostic purposes + ) + + ;;(message "starting a 3-slash comment") + ;; get the prior word, and the 2 chars preceding it. + (backward-word) + + (setq word-back (thing-at-point 'word) + char0 (char-before (- (point) 0)) + char1 (char-before (- (point) 1))) + + ;; restore prior position + (goto-char cur-point) + + ;; get the following word, and the 2 chars preceding it. + (forward-word) + (backward-word) + (setq word-fore (thing-at-point 'word) + char-0 (char-before (- (point) 0)) + char-1 (char-before (- (point) 1))) + + ;; restore prior position again + (goto-char cur-point) + + (cond + ;; The preceding line is empty, or all whitespace, or + ;; contains only an open-curly. In this case, insert a + ;; summary element pair. + (preceding-line-is-empty + (setq text-to-insert "/ \n/// \n/// " + flavor 1) ) + + ;; The preceding word closed a summary element. In this case, + ;; if the forward word does not open a remarks element, then + ;; insert a remarks element. + ((and (string-equal word-back "summary") (eq char0 ?/) (eq char1 ?<)) + (if (not (and (string-equal word-fore "remarks") (eq char-0 ?<))) + (setq text-to-insert "/ \n/// \n/// \n/// \n/// " + flavor 2))) + + ;; The preceding word closed the remarks section. In this case, + ;; insert an example element. + ((and (string-equal word-back "remarks") (eq char0 ?/) (eq char1 ?<)) + (setq text-to-insert "/ \n/// \n/// " + flavor 3)) + + ;; The preceding word closed the example section. In this + ;; case, insert an returns element. This isn't always + ;; correct, because sometimes the xml code doc is attached to + ;; a class or a property, neither of which has a return + ;; value. A more intelligent implementation would inspect the + ;; syntax state and only inject a returns element if + ;; appropriate. + ((and (string-equal word-back "example") (eq char0 ?/) (eq char1 ?<)) + (setq text-to-insert "/ " + fn-to-call (lambda () + (backward-word) + (backward-char) + (backward-char) + (c-indent-line-or-region) + ) + flavor 4)) + + ;; The preceding word opened the remarks section, or it + ;; closed a para section. In this case, insert a para + ;; element, using appropriate indentation with respect to the + ;; prior tag. + ((or + (and (string-equal word-back "remarks") (eq char0 ?<) (or (eq char1 32) (eq char1 9))) + (and (string-equal word-back "para") (eq char0 ?/) (eq char1 ?<))) + + (let (prior-point spacer) + (save-excursion + (backward-word) + (backward-char) + (backward-char) + (setq prior-point (point)) + (skip-chars-backward "\t ") + (setq spacer (buffer-substring (point) prior-point)) + ;;(message (format "pt(%d) prior(%d) spacer(%s)" (point) prior-point spacer)) + ) + + (if (string-equal word-back "remarks") + (setq spacer (concat spacer " "))) + + (setq text-to-insert (format "/%s\n///%s \n///%s" + spacer spacer spacer) + flavor 6))) + + ;; The preceding word opened a para element. In this case, if + ;; the forward word does not close the para element, then + ;; close the para element. + ;; -- + ;; This is a nice idea but flawed. Suppose I have a para element with some + ;; text in it. If I position the cursor at the first line, then type 3 slashes, + ;; I get a close-element, and that would be inappropriate. Not sure I can + ;; easily solve that problem, so the best thing might be to simply punt, and + ;; require people to close their own elements. + ;; + ;; ( (and (string-equal word-back "para") (eq char0 60) (or (eq char1 32) (eq char1 9))) + ;; (if (not (and (string-equal word-fore "para") (eq char-0 47) (eq char-1 60) )) + ;; (setq text-to-insert "/ \n/// \n///" + ;; fn-to-call (lambda () + ;; (previous-line) + ;; (end-of-line) + ;; ) + ;; flavor 7) ) + ;; ) + + ;; the default case - do nothing + (t nil)) + + (if text-to-insert + (progn + ;;(message (format "inserting special text (f(%d))" flavor)) + + ;; set the flag, that we actually inserted text + (setq did-auto-insert t) + + ;; save point of beginning of insertion + (setq cur-point (point)) + + ;; actually insert the text + (insert text-to-insert) + + ;; indent the inserted string, and re-position point, either through + ;; the case-specific fn, or via the default progn. + (if fn-to-call + (funcall fn-to-call) + + (let ((newline-count 0) (pos 0) ix) + + ;; count the number of newlines in the inserted string + (while (string-match "\n" text-to-insert pos) + (setq pos (match-end 0) + newline-count (+ newline-count 1) ) + ) + + ;; indent what we just inserted + (c-indent-region cur-point (point) t) + + ;; move up n/2 lines. This assumes that the + ;; inserted text is ~symmetric about the halfway point. + ;; The assumption holds if the xml code doc uses a + ;; begin-elt and end-elt on a new line all by themselves, + ;; and a blank line in between them where the point should be. + ;; A more intelligent implementation would use a specific + ;; marker string, like @@DOT, to note the desired point. + (previous-line (/ newline-count 2)) + (end-of-line))))))))) + + (if (not did-auto-insert) + (self-insert-command (prefix-numeric-value arg))))) + +;; ================================================================== +;; end of c# code-doc insertion magic +;; ================================================================== + + + + +;; ================================================================== +;; c# fontification extensions +;; ================================================================== +;; Commentary: +;; +;; The purpose of the following code is to fix font-lock for C#, +;; specifically for the verbatim-literal strings. C# is a cc-mode +;; language and strings are handled mostly like other c-based +;; languages. The one exception is the verbatim-literal string, which +;; uses the syntax @"...". +;; +;; `parse-partial-sexp' treats those strings as just regular strings, +;; with the @ a non-string character. This is fine, except when the +;; verblit string ends in a slash, in which case, font-lock breaks from +;; that point onward in the buffer. +;; +;; This is an attempt to fix that. +;; +;; The idea is to scan the buffer in full for verblit strings, and apply the +;; appropriate syntax-table text properties for verblit strings. Also setting +;; `parse-sexp-lookup-properties' to t tells `parse-partial-sexp' +;; to use the syntax-table text properties set up by the scan as it does +;; its parse. +;; +;; Also need to re-scan after any changes in the buffer, but on a more +;; limited region. +;; + + +;; ;; I don't remember what this is supposed to do, +;; ;; or how I figured out the value. +;; ;; +;; (defconst csharp-font-lock-syntactic-keywords +;; '(("\\(@\\)\\(\"\\)[^\"]*\\(\"\\)\\(\"\\)[^\"]*\\(\"\\)[^\"]" +;; (1 '(6)) (2 '(7)) (3 '(1)) (4 '(1)) (5 '(7)) +;; )) +;; "Highlighting of verbatim literal strings. See also the variable +;; `font-lock-keywords'.") + + + +;; Allow this: +;; (csharp-log 3 "csharp: scan...'%s'" state) + +(defvar csharp-log-level 0 + "The current log level for CSharp-specific operations. +This is used in particular by the verbatim-literal +string scanning. + +Most other csharp functions are not instrumented. +0 = NONE, 1 = Info, 2 = VERBOSE, 3 = DEBUG, 4 = SHUTUP ALREADY. ") + +(defun csharp-log (level text &rest args) + "Log a message at level LEVEL. +If LEVEL is higher than `csharp-log-level', the message is +ignored. Otherwise, it is printed using `message'. +TEXT is a format control string, and the remaining arguments ARGS +are the string substitutions (see `format')." + (if (<= level csharp-log-level) + (let* ((msg (apply 'format text args))) + (message "%s" msg) + ))) + + + +(defun csharp-max-beginning-of-stmt () + "Return the greater of `c-beginning-of-statement-1' and +`c-beginning-of-statement' . I don't understand why both of +these methods are necessary or why they differ. But they do." + + (let (dash + nodash + (curpos (point))) + + ;; I think this may need a save-excursion... + ;; Calling c-beginning-of-statement-1 resets the point! + + (setq dash (progn (c-beginning-of-statement-1) (point))) + (csharp-log 3 "C#: max-bostmt dash(%d)" dash) + (goto-char curpos) + + (setq nodash (progn (c-beginning-of-statement 1) (point))) + (csharp-log 3 "C#: max-bostmt nodash(%d)" nodash) + (goto-char curpos) + + (max dash nodash))) + + +(defun csharp-in-literal (&optional lim detect-cpp) + "Return the type of literal point is in, if any. +Basically this works like `c-in-literal' except it doesn't +use or fill the cache (`c-in-literal-cache'). + +The return value is `c' if in a C-style comment, `c++' if in a C++ +style comment, `string' if in a string literal, `pound' if DETECT-CPP +is non-nil and in a preprocessor line, or nil if somewhere else. +Optional LIM is used as the backward limit of the search. If omitted, +or nil, `c-beginning-of-syntax' is used. + +Note that this function might do hidden buffer changes. See the +comment at the start of cc-engine.el for more info." + + (let ((rtn + (save-excursion + (let* ((pos (point)) + (lim (or lim (progn + (c-beginning-of-syntax) + (point)))) + (state (parse-partial-sexp lim pos))) + (csharp-log 4 "C#: parse lim(%d) state: %s" lim (prin1-to-string state)) + (cond + ((elt state 3) + (csharp-log 4 "C#: in literal string (%d)" pos) + 'string) + ((elt state 4) + (csharp-log 4 "C#: in literal comment (%d)" pos) + (if (elt state 7) 'c++ 'c)) + ((and detect-cpp (c-beginning-of-macro lim)) 'pound) + (t nil)))))) + rtn)) + + +(defun csharp-set-vliteral-syntax-table-properties (beg end) + "Scan the buffer text between BEG and END, a verbatim literal +string, setting and clearing syntax-table text properties where +necessary. + +We need to modify the default syntax-table text property in these cases: + (backslash) - is not an escape inside a verbatim literal string. + (double-quote) - can be a literal quote, when doubled. + +BEG is the @ delimiter. END is the 'old' position of the ending quote. + +see http://www.sunsite.ualberta.ca/Documentation/Gnu/emacs-lisp-ref-21-2.7/html_node/elisp_592.html +for the list of syntax table numeric codes. + +" + + (csharp-log 3 "C#: set-vlit-syntax-table: beg(%d) end(%d)" beg end) + + (if (and (> beg 0) (> end 0)) + + (let ((curpos beg) + (state 0)) + + (c-clear-char-properties beg end 'syntax-table) + + (while (<= curpos end) + + (cond + ((= state 0) + (if (= (char-after curpos) ?@) + (progn + (c-put-char-property curpos 'syntax-table '(3)) ; (6) = expression prefix, (3) = symbol + ;;(message (format "C#: set-s-t: prefix pos(%d) chr(%c)" beg (char-after beg))) + ) + ) + (setq state (+ 1 state))) + + ((= state 1) + (if (= (char-after curpos) ?\") + (progn + (c-put-char-property curpos 'syntax-table '(7)) ; (7) = string quote + ;;(message (format "C#: set-s-t: open quote pos(%d) chr(%c)" + ;; curpos (char-after curpos))) + )) + (setq state (+ 1 state))) + + ((= state 2) + (cond + ;; handle backslash + ((= (char-after curpos) ?\\) + (c-put-char-property curpos 'syntax-table '(2)) ; (1) = punctuation, (2) = word + ;;(message (format "C#: set-s-t: backslash word pos(%d) chr(%c)" curpos (char-after curpos))) + ) + + ;; doubled double-quote + ((and + (= (char-after curpos) ?\") + (= (char-after (+ 1 curpos)) ?\")) + (c-put-char-property curpos 'syntax-table '(2)) ; (1) = punctuation, (2) = word + (c-put-char-property (+ 1 curpos) 'syntax-table '(2)) ; (1) = punctuation + ;;(message (format "C#: set-s-t: double doublequote pos(%d) chr(%c)" curpos (char-after curpos))) + (setq curpos (+ curpos 1)) + ) + + ;; a single double-quote, which should be a string terminator + ((= (char-after curpos) ?\") + (c-put-char-property curpos 'syntax-table '(7)) ; (7) = string quote + ;;(message (format "C#: set-s-t: close quote pos(%d) chr(%c)" curpos (char-after curpos))) + ;;go no further + (setq state (+ 1 state))) + + ;; everything else + (t + ;;(message (format "C#: set-s-t: none pos(%d) chr(%c)" curpos (char-after curpos))) + nil)))) + ;; next char + (setq curpos (+ curpos 1)))))) + + + +(defun csharp-end-of-verbatim-literal-string (&optional lim) + "Moves to and returns the position of the end quote of the verbatim literal +string. When calling, point should be on the @ of the verblit string. +If it is not, then no movement is performed and `point' is returned. + +This function ignores text properties. In fact it is the +underlying scanner used to set the text properties in a C# buffer. +" + + (csharp-log 3 "C#: end-of-vlit-string: point(%d) c(%c)" (point) (char-after)) + + (let (curpos + (max (or lim (point-max)))) + + (if (not (looking-at "@\"")) + (point) + (forward-char 2) ;; pass up the @ sign and first quote + (setq curpos (point)) + + ;; Within a verbatim literal string, a doubled double-quote + ;; escapes the double-quote." + (while (and ;; process characters... + (or ;; while... + (not (eq (char-after curpos) ?\")) ;; it's not a quote + (eq (char-after (+ curpos 1)) ?\")) ;; or, its a double (double) quote + (< curpos max)) ;; and we're not done yet + + (cond + ((and (eq (char-after curpos) ?\") ;; it's a double-quote. + (eq (char-after (+ curpos 1)) ?\")) + (setq curpos (+ 2 curpos))) ;; Skip 2 + (t ;; anything else + (setq curpos (+ 1 curpos))))) ;; skip fwd 1 + curpos))) + + + + +(defun csharp-scan-for-verbatim-literals-and-set-props (&optional beg end) + +"Scans the buffer, between BEG and END, for verbatim literal +strings, and sets override text properties on each string to +allow proper syntax highlighting, indenting, and cursor movement. + +BEG and END define the limits of the scan. When nil, they +default to `point-min' and `point-max' respectively. + +Setting text properties generally causes the buffer to be marked +as modified, but this fn suppresses that via the +`c-buffer-save-state' macro, for any changes in text properties +that it makes. This fn also ignores the read-only setting on a +buffer, using the same macro. + +This fn is called when a csharp-mode buffer is loaded, with BEG +and END set to nil, to do a full scan. It is also called on +every buffer change, with the BEG and END set to the values for +the change. + +The return value is nil if the buffer was not a csharp-mode +buffer. Otherwise it is the last cursor position examined by the +scan. +" + + (if (not (c-major-mode-is 'csharp-mode)) ;; don't scan if not csharp mode + nil + (save-excursion + (c-save-buffer-state + ((curpos (or beg (point-min))) + (lastpos (or end (point-max))) + (state 0) (start 0) (cycle 0) + literal eos limits) + + (csharp-log 3 "C#: scan") + (goto-char curpos) + + (while (and (< curpos lastpos) (< cycle 10000)) + (cond + + ;; Case 1: current char is a @ sign + ;; -------------------------------------------- + ;; Check to see if it demarks the beginning of a verblit + ;; string. + ((= ?@ (char-after curpos)) + + ;; are we in a comment? a string? Maybe the @ is a prefix + ;; to allow the use of a reserved word as a symbol. Let's find out. + + ;; not sure why I need both of the following. + (syntax-ppss-flush-cache 1) + (parse-partial-sexp 1 curpos) + (goto-char curpos) + (setq literal (csharp-in-literal)) + (cond + + ;; Case 1.A: it's a @ within a string. + ;; -------------------------------------------- + ;; This should never happen, because this scanner hops over strings. + ;; But it might happen if the scan starts at an odd place. + ((eq literal 'string) nil) + + ;; Case 1.B: The @ is within a comment. Hop over it. + ((and (memq literal '(c c++)) + ;; This is a kludge for XEmacs where we use + ;; `buffer-syntactic-context', which doesn't correctly + ;; recognize "\*/" to end a block comment. + ;; `parse-partial-sexp' which is used by + ;; `c-literal-limits' will however do that in most + ;; versions, which results in that we get nil from + ;; `c-literal-limits' even when `c-in-literal' claims + ;; we're inside a comment. + ;;(setq limits (c-literal-limits start))) + (setq limits (c-literal-limits))) + + ;; advance to the end of the comment + (if limits + (progn + (csharp-log 4 "C#: scan: jump end comment A (%d)" (cdr limits)) + (setq curpos (cdr limits))))) + + + ;; Case 1.B: curpos is at least 2 chars before the last + ;; position to examine, and, the following char is a + ;; double-quote (ASCII 34). + ;; -------------------------------------------- + ;; This looks like the beginning of a verbatim string + ;; literal. + ((and (< (+ 2 curpos) lastpos) + (= ?\" (char-after (+ 1 curpos)))) + + (setq eos (csharp-end-of-verbatim-literal-string)) + ;; set override syntax properties on the verblit string + (csharp-set-vliteral-syntax-table-properties curpos eos) + + (csharp-log 4 "C#: scan: jump end verblit string (%d)" eos) + (setq curpos eos)))) + + + ;; Case 2: current char is a double-quote. + ;; -------------------------------------------- + ;; If this is a string, we hop over it, on the assumption that + ;; this scanner need not bother with regular literal strings, which + ;; get the proper syntax with the generic approach. + ;; If in a comment, hop over the comment. + ((= ?\" (char-after curpos)) + (goto-char curpos) + (setq literal (c-in-literal)) + (cond + + ;; Case 2.A: a quote within a string + ;; -------------------------------------------- + ;; This shouldn't happen, because we hop over strings. + ;; But it might. + ((eq literal 'string) nil) + + ;; Case 2.B: a quote within a comment + ;; -------------------------------------------- + ((and (memq literal '(c c++)) + ;; This is a kludge for XEmacs where we use + ;; `buffer-syntactic-context', which doesn't correctly + ;; recognize "\*/" to end a block comment. + ;; `parse-partial-sexp' which is used by + ;; `c-literal-limits' will however do that in most + ;; versions, which results in that we get nil from + ;; `c-literal-limits' even when `c-in-literal' claims + ;; we're inside a comment. + ;;(setq limits (c-literal-limits start))) + (setq limits (c-literal-limits))) + + ;; advance to the end of the comment + (if limits + (progn + (setq curpos (cdr limits)) + (csharp-log 3 "C#: scan: jump end comment B (%s)" curpos)))) + + + ;; Case 2.C: Not in a comment, and not in a string. + ;; -------------------------------------------- + ;; This is the beginning of a literal (but not verbatim) string. + (t + (forward-char 1) ;; pass up the quote + (if (consp (setq limits (c-literal-limits))) + (progn + (csharp-log 4 "C#: scan: jump end literal (%d)" (cdr limits)) + (setq curpos (cdr limits)))))))) + + (setq cycle (+ 1 cycle)) + (setq curpos (+ 1 curpos)) + (c-safe (goto-char curpos))))))) + + +(defun csharp-before-font-lock (beg end old-len) + "Adjust`syntax-table' properties on the region affected by the change +in a csharp-mode buffer. + +This function is the C# value for `c-before-font-lock-function'. +It intended to be called only by the cc-mode runtime. + +It prepares the buffer for font locking, hence must get called +before `font-lock-after-change-function'. + +It does hidden buffer changes. + +BEG, END and OLD-LEN have the same meaning here as for any +after-change function. + +Point is undefined both before and after this function call. +The return value is meaningless, and is ignored by cc-mode. +" + (let ((start-scan (progn + (c-beginning-of-statement 1) + (point)))) + (csharp-scan-for-verbatim-literals-and-set-props start-scan end))) + + + +(c-lang-defconst c-before-font-lock-function + csharp 'csharp-before-font-lock) + +;; ================================================================== +;; end of c# fontification extensions +;; ================================================================== + + + + + +;; ================================================================== +;; C#-specific optimizations of cc-mode funcs +;; ================================================================== + + +;; There's never a need to check for C-style macro definitions in +;; a C# buffer. +(defadvice c-beginning-of-macro (around + csharp-mode-advice-1 + compile activate) + (if (c-major-mode-is 'csharp-mode) + nil + ad-do-it) + ) + + +;; There's never a need to move over an Obj-C directive in csharp mode +(defadvice c-forward-objc-directive (around + csharp-mode-advice-2 + compile activate) + (if (c-major-mode-is 'csharp-mode) + nil + ad-do-it) + ) + +;; ================================================================== +;; end of C#-specific optimizations of cc-mode funcs +;; ================================================================== + + + + + + + + +;; ================================================================== +;; c# - monkey-patching of basic parsing logic +;; ================================================================== +;; +;; Here, the model redefines two defuns to add special cases for csharp +;; mode. These primarily deal with indentation of instance +;; initializers, which are somewhat unique to C#. I couldn't figure out +;; how to get cc-mode to do what C# needs, without modifying these +;; defuns. +;; + +(defun c-looking-at-inexpr-block (lim containing-sexp &optional check-at-end) + ;; Return non-nil if we're looking at the beginning of a block + ;; inside an expression. The value returned is actually a cons of + ;; either 'inlambda, 'inexpr-statement or 'inexpr-class and the + ;; position of the beginning of the construct. + ;; + ;; LIM limits the backward search. CONTAINING-SEXP is the start + ;; position of the closest containing list. If it's nil, the + ;; containing paren isn't used to decide whether we're inside an + ;; expression or not. If both LIM and CONTAINING-SEXP are used, LIM + ;; needs to be farther back. + ;; + ;; If CHECK-AT-END is non-nil then extra checks at the end of the + ;; brace block might be done. It should only be used when the + ;; construct can be assumed to be complete, i.e. when the original + ;; starting position was further down than that. + ;; + ;; This function might do hidden buffer changes. + + (save-excursion + (let ((res 'maybe) passed-paren + (closest-lim (or containing-sexp lim (point-min))) + ;; Look at the character after point only as a last resort + ;; when we can't disambiguate. + (block-follows (and (eq (char-after) ?{) (point)))) + + (while (and (eq res 'maybe) + (progn (c-backward-syntactic-ws) + (> (point) closest-lim)) + (not (bobp)) + (progn (backward-char) + (looking-at "[\]\).]\\|\\w\\|\\s_")) + (c-safe (forward-char) + (goto-char (scan-sexps (point) -1)))) + + (setq res + (if (looking-at c-keywords-regexp) + (let ((kw-sym (c-keyword-sym (match-string 1)))) + (cond + ((and block-follows + (c-keyword-member kw-sym 'c-inexpr-class-kwds)) + (and (not (eq passed-paren ?\[)) + + ;; dinoch Thu, 22 Apr 2010 18:20 + ;; ============================================ + ;; looking at new MyType() { ... } + ;; means this is a brace list, so, return nil, + ;; implying NOT looking-at-inexpr-block + (not + (and (c-major-mode-is 'csharp-mode) + (looking-at "new\s+\\([[:alnum:]_]+\\)\\b"))) + + (or (not (looking-at c-class-key)) + ;; If the class instantiation is at the start of + ;; a statement, we don't consider it an + ;; in-expression class. + (let ((prev (point))) + (while (and + (= (c-backward-token-2 1 nil closest-lim) 0) + (eq (char-syntax (char-after)) ?w)) + (setq prev (point))) + (goto-char prev) + (not (c-at-statement-start-p))) + ;; Also, in Pike we treat it as an + ;; in-expression class if it's used in an + ;; object clone expression. + (save-excursion + (and check-at-end + (c-major-mode-is 'pike-mode) + (progn (goto-char block-follows) + (zerop (c-forward-token-2 1 t))) + (eq (char-after) ?\()))) + (cons 'inexpr-class (point)))) + ((c-keyword-member kw-sym 'c-inexpr-block-kwds) + (when (not passed-paren) + (cons 'inexpr-statement (point)))) + ((c-keyword-member kw-sym 'c-lambda-kwds) + (when (or (not passed-paren) + (eq passed-paren ?\()) + (cons 'inlambda (point)))) + ((c-keyword-member kw-sym 'c-block-stmt-kwds) + nil) + (t + 'maybe))) + + (if (looking-at "\\s(") + (if passed-paren + (if (and (eq passed-paren ?\[) + (eq (char-after) ?\[)) + ;; Accept several square bracket sexps for + ;; Java array initializations. + 'maybe) + (setq passed-paren (char-after)) + 'maybe) + 'maybe)))) + + (if (eq res 'maybe) + (when (and c-recognize-paren-inexpr-blocks + block-follows + containing-sexp + (eq (char-after containing-sexp) ?\()) + (goto-char containing-sexp) + (if (or (save-excursion + (c-backward-syntactic-ws lim) + (and (> (point) (or lim (point-min))) + (c-on-identifier))) + (and c-special-brace-lists + (c-looking-at-special-brace-list))) + nil + (cons 'inexpr-statement (point)))) + + res)))) + + + + +(defconst csharp-enum-decl-re + (concat + "\\\s+\\([[:alnum:]_]+\\)\s*:\s*" + "\\(" + (c-make-keywords-re nil + (list "sbyte" "byte" "short" "ushort" "int" "uint" "long" "ulong")) + "\\)") + "Regex that captures an enum declaration in C#" + ) + + + +(defun c-inside-bracelist-p (containing-sexp paren-state) + ;; return the buffer position of the beginning of the brace list + ;; statement if we're inside a brace list, otherwise return nil. + ;; CONTAINING-SEXP is the buffer pos of the innermost containing + ;; paren. PAREN-STATE is the remainder of the state of enclosing + ;; braces + ;; + ;; N.B.: This algorithm can potentially get confused by cpp macros + ;; placed in inconvenient locations. It's a trade-off we make for + ;; speed. + ;; + ;; This function might do hidden buffer changes. + (or + ;; This will pick up brace list declarations. + (c-safe + (save-excursion + (goto-char containing-sexp) + (c-forward-sexp -1) + (let (bracepos) + (if (and (or (looking-at c-brace-list-key) + + (progn (c-forward-sexp -1) + (looking-at c-brace-list-key)) + + ;; dinoch Thu, 22 Apr 2010 18:20 + ;; ============================================ + ;; looking enum Foo : int + ;; means this is a brace list, so, return nil, + ;; implying NOT looking-at-inexpr-block + + (and (c-major-mode-is 'csharp-mode) + (progn + (c-forward-sexp -1) + (looking-at csharp-enum-decl-re)))) + + (setq bracepos (c-down-list-forward (point))) + (not (c-crosses-statement-barrier-p (point) + (- bracepos 2)))) + (point))))) + ;; this will pick up array/aggregate init lists, even if they are nested. + (save-excursion + (let ((class-key + ;; Pike can have class definitions anywhere, so we must + ;; check for the class key here. + (and (c-major-mode-is 'pike-mode) + c-decl-block-key)) + bufpos braceassignp lim next-containing) + (while (and (not bufpos) + containing-sexp) + (when paren-state + (if (consp (car paren-state)) + (setq lim (cdr (car paren-state)) + paren-state (cdr paren-state)) + (setq lim (car paren-state))) + (when paren-state + (setq next-containing (car paren-state) + paren-state (cdr paren-state)))) + (goto-char containing-sexp) + (if (c-looking-at-inexpr-block next-containing next-containing) + ;; We're in an in-expression block of some kind. Do not + ;; check nesting. We deliberately set the limit to the + ;; containing sexp, so that c-looking-at-inexpr-block + ;; doesn't check for an identifier before it. + (setq containing-sexp nil) + ;; see if the open brace is preceded by = or [...] in + ;; this statement, but watch out for operator= + (setq braceassignp 'dontknow) + (c-backward-token-2 1 t lim) + ;; Checks to do only on the first sexp before the brace. + (when (and c-opt-inexpr-brace-list-key + (eq (char-after) ?\[)) + ;; In Java, an initialization brace list may follow + ;; directly after "new Foo[]", so check for a "new" + ;; earlier. + (while (eq braceassignp 'dontknow) + (setq braceassignp + (cond ((/= (c-backward-token-2 1 t lim) 0) nil) + ((looking-at c-opt-inexpr-brace-list-key) t) + ((looking-at "\\sw\\|\\s_\\|[.[]") + ;; Carry on looking if this is an + ;; identifier (may contain "." in Java) + ;; or another "[]" sexp. + 'dontknow) + (t nil))))) + ;; Checks to do on all sexps before the brace, up to the + ;; beginning of the statement. + (while (eq braceassignp 'dontknow) + (cond ((eq (char-after) ?\;) + (setq braceassignp nil)) + ((and class-key + (looking-at class-key)) + (setq braceassignp nil)) + ((eq (char-after) ?=) + ;; We've seen a =, but must check earlier tokens so + ;; that it isn't something that should be ignored. + (setq braceassignp 'maybe) + (while (and (eq braceassignp 'maybe) + (zerop (c-backward-token-2 1 t lim))) + (setq braceassignp + (cond + ;; Check for operator = + ((and c-opt-op-identifier-prefix + (looking-at c-opt-op-identifier-prefix)) + nil) + ;; Check for `= in Pike. + ((and (c-major-mode-is 'pike-mode) + (or (eq (char-after) ?`) + ;; Special case for Pikes + ;; `[]=, since '[' is not in + ;; the punctuation class. + (and (eq (char-after) ?\[) + (eq (char-before) ?`)))) + nil) + ((looking-at "\\s.") 'maybe) + ;; make sure we're not in a C++ template + ;; argument assignment + ((and + (c-major-mode-is 'c++-mode) + (save-excursion + (let ((here (point)) + (pos< (progn + (skip-chars-backward "^<>") + (point)))) + (and (eq (char-before) ?<) + (not (c-crosses-statement-barrier-p + pos< here)) + (not (c-in-literal)) + )))) + nil) + (t t)))))) + (if (and (eq braceassignp 'dontknow) + (/= (c-backward-token-2 1 t lim) 0)) + (setq braceassignp nil))) + (if (not braceassignp) + (if (eq (char-after) ?\;) + ;; Brace lists can't contain a semicolon, so we're done. + (setq containing-sexp nil) + ;; Go up one level. + (setq containing-sexp next-containing + lim nil + next-containing nil)) + ;; we've hit the beginning of the aggregate list + (c-beginning-of-statement-1 + (c-most-enclosing-brace paren-state)) + (setq bufpos (point)))) + ) + bufpos)) + )) + +;; ================================================================== +;; end of monkey-patching of basic parsing logic +;; ================================================================== + + + + +;;(easy-menu-define csharp-menu csharp-mode-map "C# Mode Commands" +;; ;; Can use `csharp' as the language for `c-mode-menu' +;; ;; since its definition covers any language. In +;; ;; this case the language is used to adapt to the +;; ;; nonexistence of a cpp pass and thus removing some +;; ;; irrelevant menu alternatives. +;; (cons "C#" (c-lang-const c-mode-menu csharp))) + +;;; Autoload mode trigger +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.cs$" . csharp-mode)) + + + +(c-add-style "C#" + '("Java" + (c-basic-offset . 4) + (c-comment-only-line-offset . (0 . 0)) + (c-offsets-alist . ( + (access-label . -) + (arglist-close . c-lineup-arglist) + (arglist-cont . 0) + (arglist-cont-nonempty . c-lineup-arglist) + (arglist-intro . c-lineup-arglist-intro-after-paren) + (block-close . 0) + (block-open . 0) + (brace-entry-open . 0) + (brace-list-close . 0) + (brace-list-entry . 0) + (brace-list-intro . +) + (brace-list-open . +) + (c . c-lineup-C-comments) + (case-label . +) + (catch-clause . 0) + (class-close . 0) + (class-open . 0) + (comment-intro . c-lineup-comment) + (cpp-macro . 0) + (cpp-macro-cont . c-lineup-dont-change) + (defun-block-intro . +) + (defun-close . 0) + (defun-open . 0) + (do-while-closure . 0) + (else-clause . 0) + (extern-lang-close . 0) + (extern-lang-open . 0) + (friend . 0) + (func-decl-cont . +) + (inclass . +) + (inexpr-class . +) + (inexpr-statement . 0) + (inextern-lang . +) + (inher-cont . c-lineup-multi-inher) + (inher-intro . +) + (inlambda . c-lineup-inexpr-block) + (inline-close . 0) + (inline-open . 0) + (innamespace . +) + (knr-argdecl . 0) + (knr-argdecl-intro . 5) + (label . 0) + (lambda-intro-cont . +) + (member-init-cont . c-lineup-multi-inher) + (member-init-intro . +) + (namespace-close . 0) + (namespace-open . 0) + (statement . 0) + (statement-block-intro . +) + (statement-case-intro . +) + (statement-case-open . +) + (statement-cont . +) + (stream-op . c-lineup-streamop) + (string . c-lineup-dont-change) + (substatement . +) + (substatement-open . 0) + (template-args-cont c-lineup-template-args +) + (topmost-intro . 0) + (topmost-intro-cont . 0) + )) + )) + + + + +;; Custom variables +;;;###autoload +(defcustom csharp-mode-hook nil + "*Hook called by `csharp-mode'." + :type 'hook + :group 'c) + + + +;;; The entry point into the mode +;;;###autoload +(defun csharp-mode () + "Major mode for editing C# code. This mode is derived from CC Mode to +support C#. + +The hook `c-mode-common-hook' is run with no args at mode +initialization, then `csharp-mode-hook'. + +This mode will automatically add a regexp for Csc.exe error and warning +messages to the `compilation-error-regexp-alist'. + +Key bindings: +\\{csharp-mode-map}" + (interactive) + (kill-all-local-variables) + (make-local-variable 'beginning-of-defun-function) + (make-local-variable 'end-of-defun-function) + (c-initialize-cc-mode t) + (set-syntax-table csharp-mode-syntax-table) + + ;; define underscore as part of a word in the Csharp syntax table + (modify-syntax-entry ?_ "w" csharp-mode-syntax-table) + + ;; define @ as an expression prefix in Csharp syntax table + (modify-syntax-entry ?@ "'" csharp-mode-syntax-table) + + (setq major-mode 'csharp-mode + mode-name "C#" + local-abbrev-table csharp-mode-abbrev-table + abbrev-mode t) + (use-local-map csharp-mode-map) + + ;; `c-init-language-vars' is a macro that is expanded at compile + ;; time to a large `setq' with all the language variables and their + ;; customized values for our language. + (c-init-language-vars csharp-mode) + + + ;; `c-common-init' initializes most of the components of a CC Mode + ;; buffer, including setup of the mode menu, font-lock, etc. + ;; There's also a lower level routine `c-basic-common-init' that + ;; only makes the necessary initialization to get the syntactic + ;; analysis and similar things working. + (c-common-init 'csharp-mode) + + + ;; csc.exe, the C# Compiler, produces errors like this: + ;; file.cs(6,18): error SC1006: Name of constructor must match name of class + + (add-hook 'compilation-mode-hook + (lambda () + (setq compilation-error-regexp-alist + (cons ' ("^[ \t]*\\([A-Za-z0-9][^(]+\\.cs\\)(\\([0-9]+\\)[,]\\([0-9]+\\)) ?: \\(error\\|warning\\) CS[0-9]+:" 1 2 3) + compilation-error-regexp-alist)))) + + ;; to allow next-error to work with csc.exe: + (setq compilation-scroll-output t) + + ;; allow fill-paragraph to work on xml code doc + (set (make-local-variable 'paragraph-separate) + "[ \t]*\\(//+\\|\\**\\)\\([ \t]+\\|[ \t]+<.+?>\\)$\\|^\f") + + + (c-run-mode-hooks 'c-mode-common-hook 'csharp-mode-hook) + + + ;; Need the following for parse-partial-sexp to work properly with + ;; verbatim literal strings Setting this var to non-nil tells + ;; `parse-partial-sexp' to pay attention to the syntax text + ;; properties on the text in the buffer. If csharp-mode attaches + ;; text syntax to @"..." then, `parse-partial-sexp' will treat those + ;; strings accordingly. + (set (make-local-variable 'parse-sexp-lookup-properties) + t) + + ;; scan the entire buffer for verblit strings + (csharp-scan-for-verbatim-literals-and-set-props nil nil) + + + (local-set-key (kbd "/") 'csharp-maybe-insert-codedoc) + (local-set-key (kbd "{") 'csharp-insert-open-brace) + + (c-update-modeline)) + + + +(message (concat "Done loading " load-file-name)) + + +(provide 'csharp-mode) + +;;; csharp-mode.el ends here +;;MD5: 4EDCB2ECE38841F407C7ED3DA8354E15 diff --git a/.emacs.d/fuzzy.el b/.emacs.d/fuzzy.el new file mode 100644 index 0000000..c69150a --- /dev/null +++ b/.emacs.d/fuzzy.el @@ -0,0 +1,255 @@ +;;; fuzzy.el --- Fuzzy matching utilities + +;; Copyright (C) 2010 Tomohiro Matsuyama + +;; Author: Tomohiro Matsuyama +;; Keywords: convenience + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; 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 +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; + +;;; Code: + +(eval-when-compile + (require 'cl)) +(require 'regexp-opt) + +(defgroup fuzzy nil + "Fuzzy matching utilities." + :group 'convenience + :prefix "fuzzy-") + +(defcustom fuzzy-accept-error-rate 0.10 + "Error threshold." + :group 'fuzzy) + +(defvar fuzzy-accept-length-difference 2) + +(defvar fuzzy-regexp-some-char (format "\\w\\{0,%s\\}" fuzzy-accept-length-difference)) + + + +;;; Functions + +(defun fuzzy-reverse-string (string) + (apply 'string (nreverse (append string nil)))) + +(defun fuzzy-regexp-compile (string) + (labels ((oddp (n) (eq (logand n 1) 1)) + (evenp (n) (eq (logand n 1) 0)) + (opt (n) (regexp-opt-charset (append (substring string + (max 0 (- n 1)) + (min (length string) (+ n 2))) nil)))) + (concat + "\\(" + (loop for i below (length string) + for c = (if (evenp i) (opt i) fuzzy-regexp-some-char) + concat c) + "\\|" + (loop for i below (length string) + for c = (if (oddp i) (opt i) fuzzy-regexp-some-char) + concat c) + "\\)"))) + +(defalias 'fuzzy-edit-distance 'fuzzy-jaro-winkler-distance) + +(defun fuzzy-jaro-winkler-distance (s1 s2) + "http://en.wikipedia.org/wiki/Jaro-Winkler_distance" + (let* ((l1 (length s1)) + (l2 (length s2)) + (r (max 1 (1- (/ (max l1 l2) 2)))) + (m 0) + (tr 0) + (p 0) + cs1 cs2) + (loop with seen = (make-vector l2 nil) + for i below l1 + for c1 = (aref s1 i) do + (loop for j from (max 0 (- i r)) below (min l2 (+ i r)) + for c2 = (aref s2 j) + if (and (char-equal c1 c2) + (null (aref seen j))) do + (push c1 cs1) + (aset seen j c2) + (incf m) + and return nil) + finally + (setq cs1 (nreverse cs1) + cs2 (loop for i below l2 + for c = (aref seen i) + if c collect c))) + (loop for c1 in cs1 + for c2 in cs2 + if (not (char-equal c1 c2)) do + (incf tr)) + (loop for i below (min m 5) + for c1 across s1 + for c2 across s2 + while (char-equal c1 c2) do + (incf p)) + (if (eq m 0) + 0.0 + (setq m (float m)) + (let* ((dj (/ (+ (/ m l1) (/ m l2) (/ (- m (/ tr 2)) m)) 3)) + (dw (+ dj (* p 0.1 (- 1 dj))))) + dw)))) + +;; this function should be compiled +(byte-compile 'fuzzy-jaro-winkler-distance) + +(defun fuzzy-match (s1 s2 &optional function) + (or function (setq function 'fuzzy-edit-distance)) + (and (<= (abs (- (length s1) (length s2))) + fuzzy-accept-length-difference) + (>= (funcall function s1 s2) + (- 1 fuzzy-accept-error-rate)))) + +(defun fuzzy-all-completions (string collection) + "all-completions family with fuzzy matching." + (loop with length = (length string) + for str in collection + for s = (substring str 0 (min (length str) + (+ length fuzzy-accept-length-difference))) + if (fuzzy-match string s) + collect str)) + + + +;;; Search and Incremental Search + +(defvar fuzzy-search-cache nil) +(defvar fuzzy-search-cache-string nil) + +(defun fuzzy-search-cache-activate () + (setq fuzzy-search-cache (make-hash-table)) + (setq fuzzy-search-cache-string nil)) + +(defun fuzzy-search-cache-deactive () + (setq fuzzy-search-cache nil) + (setq fuzzy-search-cache-string nil)) + +(defun fuzzy-search-edit-distance (s1 s2) + (or (and fuzzy-search-cache + (cond + ((null fuzzy-search-cache-string) + (setq fuzzy-search-cache-string s1) + nil) + ((not (equal fuzzy-search-cache-string s1)) + (setq fuzzy-search-cache-string s1) + (clrhash fuzzy-search-cache) + nil) + (t)) + (gethash s2 fuzzy-search-cache)) + (let ((d (fuzzy-edit-distance s1 s2))) + (if fuzzy-search-cache + (puthash s2 d fuzzy-search-cache)) + d))) + +(defun fuzzy-search-match (s1 s2) + (fuzzy-match s1 s2 'fuzzy-search-edit-distance)) + +(defun fuzzy-search-forward (string &optional bound noerror count) + (let* ((regexp (fuzzy-regexp-compile string)) + match-data) + (save-excursion + (while (and (null match-data) + (re-search-forward regexp bound t)) + (if (fuzzy-search-match string (match-string 1)) + (setq match-data (match-data)) + (goto-char (1+ (match-beginning 1)))))) + (when match-data + (store-match-data match-data) + (goto-char (match-end 1))))) + +(defun fuzzy-search-backward (string &optional bound noerror count) + (let* ((regexp (fuzzy-regexp-compile string)) + match-data begin end) + (save-excursion + (while (and (null match-data) + (re-search-backward regexp bound t)) + (setq begin (match-beginning 1) + end (match-end 1)) + (store-match-data nil) + (goto-char (max (point-min) (- begin (* (length string) 2)))) + (while (re-search-forward regexp end t) + (if (fuzzy-search-match string (match-string 1)) + (setq match-data (match-data)) + (goto-char (1+ (match-beginning 1))))) + (unless match-data + (goto-char begin))) + (if match-data + (progn + (store-match-data match-data) + (goto-char (match-beginning 1))) + (store-match-data nil))))) + +(defvar fuzzy-isearch nil) +(defvar fuzzy-isearch-failed-count 0) +(defvar fuzzy-isearch-enabled 'on-failed) +(defvar fuzzy-isearch-original-search-fun nil) +(defvar fuzzy-isearch-prefix "[FUZZY] ") + +(defun fuzzy-isearch-activate () + (setq fuzzy-isearch t) + (setq fuzzy-isearch-failed-count 0) + (fuzzy-search-cache-activate)) + +(defun fuzzy-isearch-deactivate () + (setq fuzzy-isearch nil) + (setq fuzzy-isearch-failed-count 0) + (fuzzy-search-cache-deactive)) + +(defun fuzzy-isearch () + (cond (isearch-word + (if isearch-forward 'word-search-forward 'word-search-backward)) + (isearch-regexp + (if isearch-forward 're-search-forward 're-search-backward)) + ((or fuzzy-isearch + (eq fuzzy-isearch-enabled 'always) + (and (eq fuzzy-isearch-enabled 'on-failed) + (null isearch-success) + isearch-wrapped + (> (setq fuzzy-isearch-failed-count (1+ fuzzy-isearch-failed-count)) + 1))) + (unless fuzzy-isearch + ;(goto-char isearch-opoint) + (fuzzy-isearch-activate)) + (if isearch-forward 'fuzzy-search-forward 'fuzzy-search-backward)) + (t + (if isearch-forward 'search-forward 'search-backward)))) + +(defun fuzzy-isearch-end-hook () + (fuzzy-isearch-deactivate)) + +(defun turn-on-fuzzy-isearch () + (interactive) + (setq fuzzy-isearch-original-search-fun isearch-search-fun-function) + (setq isearch-search-fun-function 'fuzzy-isearch) + (add-hook 'isearch-mode-end-hook 'fuzzy-isearch-end-hook)) + +(defun turn-off-fuzzy-isearch () + (interactive) + (setq isearch-search-fun-function fuzzy-isearch-original-search-fun) + (remove-hook 'isearch-mode-end-hook 'fuzzy-isearch-end-hook)) + +(defadvice isearch-message-prefix (after fuzzy-isearch-message-prefix activate) + (if fuzzy-isearch + (setq ad-return-value (concat fuzzy-isearch-prefix ad-return-value)) + ad-return-value)) + +(provide 'fuzzy) +;;; fuzzy.el ends here diff --git a/.emacs.d/fuzzy.elc b/.emacs.d/fuzzy.elc new file mode 100644 index 0000000000000000000000000000000000000000..aef35d98608f625c0294188fcf74c683e368131e GIT binary patch literal 7438 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 +;; Maintainer: Karl Landström +;; Version: 2.0 Beta 8 +;; Date: 2006-12-26 +;; Keywords: languages, oop + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This file 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 +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: +;; +;; The main features of this JavaScript mode are syntactic +;; highlighting (enabled with `font-lock-mode' or +;; `global-font-lock-mode'), automatic indentation and filling of +;; comments. +;; +;; This package has (only) been tested with GNU Emacs 21.4 (the latest +;; stable release). +;; +;; Installation: +;; +;; Put this file in a directory where Emacs can find it (`C-h v +;; load-path' for more info). Then add the following lines to your +;; Emacs initialization file: +;; +;; (add-to-list 'auto-mode-alist '("\\.js\\'" . javascript-mode)) +;; (autoload 'javascript-mode "javascript" nil t) +;; +;; General Remarks: +;; +;; This mode assumes that block comments are not nested inside block +;; comments and that strings do not contain line breaks. +;; +;; Exported names start with "javascript-" whereas private names start +;; with "js-". +;; +;; Changes: +;; +;; See javascript.el.changelog. + +;;; Code: + +(require 'cc-mode) +(require 'font-lock) +(require 'newcomment) + +(defgroup javascript nil + "Customization variables for `javascript-mode'." + :tag "JavaScript" + :group 'languages) + +(defcustom javascript-indent-level 4 + "Number of spaces for each indentation step." + :type 'integer + :group 'javascript) + +(defcustom javascript-auto-indent-flag t + "Automatic indentation with punctuation characters. If non-nil, the +current line is indented when certain punctuations are inserted." + :type 'boolean + :group 'javascript) + + +;; --- Keymap --- + +(defvar javascript-mode-map nil + "Keymap used in JavaScript mode.") + +(unless javascript-mode-map + (setq javascript-mode-map (make-sparse-keymap))) + +(when javascript-auto-indent-flag + (mapc (lambda (key) + (define-key javascript-mode-map key 'javascript-insert-and-indent)) + '("{" "}" "(" ")" ":" ";" ","))) + +(defun javascript-insert-and-indent (key) + "Run command bound to key and indent current line. Runs the command +bound to KEY in the global keymap and indents the current line." + (interactive (list (this-command-keys))) + (call-interactively (lookup-key (current-global-map) key)) + (indent-according-to-mode)) + + +;; --- Syntax Table And Parsing --- + +(defvar javascript-mode-syntax-table + (let ((table (make-syntax-table))) + (c-populate-syntax-table table) + + ;; The syntax class of underscore should really be `symbol' ("_") + ;; but that makes matching of tokens much more complex as e.g. + ;; "\\" matches part of e.g. "_xyz" and "xyz_abc". Defines + ;; it as word constituent for now. + (modify-syntax-entry ?_ "w" table) + + table) + "Syntax table used in JavaScript mode.") + + +(defun js-re-search-forward-inner (regexp &optional bound count) + "Auxiliary function for `js-re-search-forward'." + (let ((parse) + (saved-point (point-min))) + (while (> count 0) + (re-search-forward regexp bound) + (setq parse (parse-partial-sexp saved-point (point))) + (cond ((nth 3 parse) + (re-search-forward + (concat "\\([^\\]\\|^\\)" (string (nth 3 parse))) + (save-excursion (end-of-line) (point)) t)) + ((nth 7 parse) + (forward-line)) + ((or (nth 4 parse) + (and (eq (char-before) ?\/) (eq (char-after) ?\*))) + (re-search-forward "\\*/")) + (t + (setq count (1- count)))) + (setq saved-point (point)))) + (point)) + + +(defun js-re-search-forward (regexp &optional bound noerror count) + "Search forward but ignore strings and comments. Invokes +`re-search-forward' but treats the buffer as if strings and +comments have been removed." + (let ((saved-point (point)) + (search-expr + (cond ((null count) + '(js-re-search-forward-inner regexp bound 1)) + ((< count 0) + '(js-re-search-backward-inner regexp bound (- count))) + ((> count 0) + '(js-re-search-forward-inner regexp bound count))))) + (condition-case err + (eval search-expr) + (search-failed + (goto-char saved-point) + (unless noerror + (error (error-message-string err))))))) + + +(defun js-re-search-backward-inner (regexp &optional bound count) + "Auxiliary function for `js-re-search-backward'." + (let ((parse) + (saved-point (point-min))) + (while (> count 0) + (re-search-backward regexp bound) + (when (and (> (point) (point-min)) + (save-excursion (backward-char) (looking-at "/[/*]"))) + (forward-char)) + (setq parse (parse-partial-sexp saved-point (point))) + (cond ((nth 3 parse) + (re-search-backward + (concat "\\([^\\]\\|^\\)" (string (nth 3 parse))) + (save-excursion (beginning-of-line) (point)) t)) + ((nth 7 parse) + (goto-char (nth 8 parse))) + ((or (nth 4 parse) + (and (eq (char-before) ?/) (eq (char-after) ?*))) + (re-search-backward "/\\*")) + (t + (setq count (1- count)))))) + (point)) + + +(defun js-re-search-backward (regexp &optional bound noerror count) + "Search backward but ignore strings and comments. Invokes +`re-search-backward' but treats the buffer as if strings and +comments have been removed." + (let ((saved-point (point)) + (search-expr + (cond ((null count) + '(js-re-search-backward-inner regexp bound 1)) + ((< count 0) + '(js-re-search-forward-inner regexp bound (- count))) + ((> count 0) + '(js-re-search-backward-inner regexp bound count))))) + (condition-case err + (eval search-expr) + (search-failed + (goto-char saved-point) + (unless noerror + (error (error-message-string err))))))) + + +(defun js-continued-var-decl-list-p () + "Return non-nil if point is inside a continued variable declaration +list." + (interactive) + (let ((start (save-excursion (js-re-search-backward "\\" nil t)))) + (and start + (save-excursion (re-search-backward "\n" start t)) + (not (save-excursion + (js-re-search-backward + ";\\|[^, \t][ \t]*\\(/[/*]\\|$\\)" start t)))))) + + +;; --- Font Lock --- + +(defun js-inside-param-list-p () + "Return non-nil if point is inside a function parameter list." + (condition-case err + (save-excursion + (up-list -1) + (and (looking-at "(") + (progn (backward-word 1) + (or (looking-at "function") + (progn (backward-word 1) (looking-at "function")))))) + (error nil))) + + +(defconst js-function-heading-1-re + "^[ \t]*function[ \t]+\\(\\w+\\)" + "Regular expression matching the start of a function header.") + +(defconst js-function-heading-2-re + "^[ \t]*\\(\\w+\\)[ \t]*:[ \t]*function\\>" + "Regular expression matching the start of a function entry in + an associative array.") + +(defconst js-keyword-re + (regexp-opt '("abstract" "break" "case" "catch" "class" "const" + "continue" "debugger" "default" "delete" "do" "else" + "enum" "export" "extends" "final" "finally" "for" + "function" "goto" "if" "implements" "import" "in" + "instanceof" "interface" "native" "new" "package" + "private" "protected" "public" "return" "static" + "super" "switch" "synchronized" "this" "throw" + "throws" "transient" "try" "typeof" "var" "void" + "volatile" "while" "with" + "let") 'words) + "Regular expression matching any JavaScript keyword.") + +(defconst js-basic-type-re + (regexp-opt '("boolean" "byte" "char" "double" "float" "int" "long" + "short" "void") 'words) + "Regular expression matching any predefined type in JavaScript.") + +(defconst js-constant-re + (regexp-opt '("false" "null" "true") 'words) + "Regular expression matching any future reserved words in JavaScript.") + + +(defconst js-font-lock-keywords-1 + (list + "\\" + (list js-function-heading-1-re 1 font-lock-function-name-face) + (list js-function-heading-2-re 1 font-lock-function-name-face) + (list "[=(][ \t]*\\(/.*?[^\\]/\\w*\\)" 1 font-lock-string-face)) + "Level one font lock.") + +(defconst js-font-lock-keywords-2 + (append js-font-lock-keywords-1 + (list (list js-keyword-re 1 font-lock-keyword-face) + (cons js-basic-type-re font-lock-type-face) + (cons js-constant-re font-lock-constant-face))) + "Level two font lock.") + + +;; Limitations with variable declarations: There seems to be no +;; sensible way to highlight variables occuring after an initialized +;; variable in a variable list. For instance, in +;; +;; var x, y = f(a, b), z +;; +;; z will not be highlighted. + +(defconst js-font-lock-keywords-3 + (append + js-font-lock-keywords-2 + (list + + ;; variable declarations + (list + (concat "\\<\\(const\\|var\\)\\>\\|" js-basic-type-re) + (list "\\(\\w+\\)[ \t]*\\([=;].*\\|,\\|/[/*]\\|$\\)" + nil + nil + '(1 font-lock-variable-name-face))) + + ;; continued variable declaration list + (list + (concat "^[ \t]*\\w+[ \t]*\\([,;=]\\|/[/*]\\|$\\)") + (list "\\(\\w+\\)[ \t]*\\([=;].*\\|,\\|/[/*]\\|$\\)" + '(if (save-excursion (backward-char) (js-continued-var-decl-list-p)) + (backward-word 1) + (end-of-line)) + '(end-of-line) + '(1 font-lock-variable-name-face))) + + ;; formal parameters + (list + (concat "\\\\([ \t]+\\w+\\)?[ \t]*([ \t]*\\w") + (list "\\(\\w+\\)\\([ \t]*).*\\)?" + '(backward-char) + '(end-of-line) + '(1 font-lock-variable-name-face))) + + ;; continued formal parameter list + (list + (concat "^[ \t]*\\w+[ \t]*[,)]") + (list "\\w+" + '(if (save-excursion (backward-char) (js-inside-param-list-p)) + (backward-word 1) + (end-of-line)) + '(end-of-line) + '(0 font-lock-variable-name-face))))) + "Level three font lock.") + +(defconst js-font-lock-keywords + '(js-font-lock-keywords-3 js-font-lock-keywords-1 js-font-lock-keywords-2 + js-font-lock-keywords-3) + "See `font-lock-keywords'.") + + +;; --- Indentation --- + +(defconst js-possibly-braceless-keyword-re + (regexp-opt + '("catch" "do" "else" "finally" "for" "if" "try" "while" "with" "let") + 'words) + "Regular expression matching keywords that are optionally + followed by an opening brace.") + +(defconst js-indent-operator-re + (concat "[-+*/%<>=&^|?:.]\\([^-+*/]\\|$\\)\\|" + (regexp-opt '("in" "instanceof") 'words)) + "Regular expression matching operators that affect indentation + of continued expressions.") + + +(defun js-looking-at-operator-p () + "Return non-nil if text after point is an operator (that is not +a comma)." + (save-match-data + (and (looking-at js-indent-operator-re) + (or (not (looking-at ":")) + (save-excursion + (and (js-re-search-backward "[?:{]\\|\\" nil t) + (looking-at "?"))))))) + + +(defun js-continued-expression-p () + "Returns non-nil if the current line continues an expression." + (save-excursion + (back-to-indentation) + (or (js-looking-at-operator-p) + (and (js-re-search-backward "\n" nil t) + (progn + (skip-chars-backward " \t") + (backward-char) + (and (> (point) (point-min)) + (save-excursion (backward-char) (not (looking-at "[/*]/"))) + (js-looking-at-operator-p) + (and (progn (backward-char) + (not (looking-at "++\\|--\\|/[/*]")))))))))) + + +(defun js-end-of-do-while-loop-p () + "Returns non-nil if word after point is `while' of a do-while +statement, else returns nil. A braceless do-while statement +spanning several lines requires that the start of the loop is +indented to the same column as the current line." + (interactive) + (save-excursion + (save-match-data + (when (looking-at "\\s-*\\") + (if (save-excursion + (skip-chars-backward "[ \t\n]*}") + (looking-at "[ \t\n]*}")) + (save-excursion + (backward-list) (backward-word 1) (looking-at "\\")) + (js-re-search-backward "\\" (point-at-bol) t) + (or (looking-at "\\") + (let ((saved-indent (current-indentation))) + (while (and (js-re-search-backward "^[ \t]*\\<" nil t) + (/= (current-indentation) saved-indent))) + (and (looking-at "[ \t]*\\") + (not (js-re-search-forward + "\\" (point-at-eol) t)) + (= (current-indentation) saved-indent))))))))) + + +(defun js-ctrl-statement-indentation () + "Returns the proper indentation of the current line if it +starts the body of a control statement without braces, else +returns nil." + (save-excursion + (back-to-indentation) + (when (save-excursion + (and (not (looking-at "[{]")) + (progn + (js-re-search-backward "[[:graph:]]" nil t) + (forward-char) + (when (= (char-before) ?\)) (backward-list)) + (skip-syntax-backward " ") + (skip-syntax-backward "w") + (looking-at js-possibly-braceless-keyword-re)) + (not (js-end-of-do-while-loop-p)))) + (save-excursion + (goto-char (match-beginning 0)) + (+ (current-indentation) javascript-indent-level))))) + + +(defun js-proper-indentation (parse-status) + "Return the proper indentation for the current line." + (save-excursion + (back-to-indentation) + (let ((ctrl-stmt-indent (js-ctrl-statement-indentation)) + (same-indent-p (looking-at "[]})]\\|\\\\|\\")) + (continued-expr-p (js-continued-expression-p))) + (cond (ctrl-stmt-indent) + ((js-continued-var-decl-list-p) + (js-re-search-backward "\\" nil t) + (+ (current-indentation) javascript-indent-level)) + ((nth 1 parse-status) + (goto-char (nth 1 parse-status)) + (if (looking-at "[({[][ \t]*\\(/[/*]\\|$\\)") + (progn + (skip-syntax-backward " ") + (when (= (char-before) ?\)) (backward-list)) + (back-to-indentation) + (cond (same-indent-p + (current-column)) + (continued-expr-p + (+ (current-column) (* 2 javascript-indent-level))) + (t + (+ (current-column) javascript-indent-level)))) + (unless same-indent-p + (forward-char) + (skip-chars-forward " \t")) + (current-column))) + (continued-expr-p javascript-indent-level) + (t 0))))) + + +(defun javascript-indent-line () + "Indent the current line as JavaScript source text." + (interactive) + (let ((parse-status + (save-excursion (parse-partial-sexp (point-min) (point-at-bol)))) + (offset (- (current-column) (current-indentation)))) + (when (not (nth 8 parse-status)) + (indent-line-to (js-proper-indentation parse-status)) + (when (> offset 0) (forward-char offset))))) + + +;; --- Filling --- + +;; FIXME: It should be possible to use the more sofisticated function +;; `c-fill-paragraph' in `cc-cmds.el' instead. However, just setting +;; `fill-paragraph-function' to `c-fill-paragraph' does not work; +;; inside `c-fill-paragraph', `fill-paragraph-function' evaluates to +;; nil!? + +(defun js-backward-paragraph () + "Move backward to start of paragraph. Postcondition: Point is at +beginning of buffer or the previous line contains only whitespace." + (forward-line -1) + (while (not (or (bobp) (looking-at "^[ \t]*$"))) + (forward-line -1)) + (when (not (bobp)) (forward-line 1))) + + +(defun js-forward-paragraph () + "Move forward to end of paragraph. Postcondition: Point is at +end of buffer or the next line contains only whitespace." + (forward-line 1) + (while (not (or (eobp) (looking-at "^[ \t]*$"))) + (forward-line 1)) + (when (not (eobp)) (backward-char 1))) + + +(defun js-fill-block-comment-paragraph (parse-status justify) + "Fill current paragraph as a block comment. PARSE-STATUS is the +result of `parse-partial-regexp' from beginning of buffer to +point. JUSTIFY has the same meaning as in `fill-paragraph'." + (let ((offset (save-excursion + (goto-char (nth 8 parse-status)) (current-indentation)))) + (save-excursion + (save-restriction + (narrow-to-region (save-excursion + (goto-char (nth 8 parse-status)) (point-at-bol)) + (save-excursion + (goto-char (nth 8 parse-status)) + (re-search-forward "*/"))) + (narrow-to-region (save-excursion + (js-backward-paragraph) + (when (looking-at "^[ \t]*$") (forward-line 1)) + (point)) + (save-excursion + (js-forward-paragraph) + (when (looking-at "^[ \t]*$") (backward-char)) + (point))) + (goto-char (point-min)) + (while (not (eobp)) + (delete-horizontal-space) + (forward-line 1)) + (let ((fill-column (- fill-column offset)) + (fill-paragraph-function nil)) + (fill-paragraph justify)) + + ;; In Emacs 21.4 as opposed to CVS Emacs 22, + ;; `fill-paragraph' seems toadd a newline at the end of the + ;; paragraph. Remove it! + (goto-char (point-max)) + (when (looking-at "^$") (backward-delete-char 1)) + + (goto-char (point-min)) + (while (not (eobp)) + (indent-to offset) + (forward-line 1)))))) + + +(defun js-sline-comment-par-start () + "Return point at the beginning of the line where the current +single-line comment paragraph starts." + (save-excursion + (beginning-of-line) + (while (and (not (bobp)) + (looking-at "^[ \t]*//[ \t]*[[:graph:]]")) + (forward-line -1)) + (unless (bobp) (forward-line 1)) + (point))) + + +(defun js-sline-comment-par-end () + "Return point at end of current single-line comment paragraph." + (save-excursion + (beginning-of-line) + (while (and (not (eobp)) + (looking-at "^[ \t]*//[ \t]*[[:graph:]]")) + (forward-line 1)) + (unless (bobp) (backward-char)) + (point))) + + +(defun js-sline-comment-offset (line) + "Return the column at the start of the current single-line +comment paragraph." + (save-excursion + (goto-line line) + (re-search-forward "//" (point-at-eol)) + (goto-char (match-beginning 0)) + (current-column))) + + +(defun js-sline-comment-text-offset (line) + "Return the column at the start of the text of the current +single-line comment paragraph." + (save-excursion + (goto-line line) + (re-search-forward "//[ \t]*" (point-at-eol)) + (current-column))) + + +(defun js-at-empty-sline-comment-p () + "Return non-nil if inside an empty single-line comment." + (and (save-excursion + (beginning-of-line) + (not (looking-at "^.*//.*[[:graph:]]"))) + (save-excursion + (re-search-backward "//" (point-at-bol) t)))) + + +(defun js-fill-sline-comments (parse-status justify) + "Fill current paragraph as a sequence of single-line comments. +PARSE-STATUS is the result of `parse-partial-regexp' from +beginning of buffer to point. JUSTIFY has the same meaning as in +`fill-paragraph'." + (when (not (js-at-empty-sline-comment-p)) + (let* ((start (js-sline-comment-par-start)) + (start-line (1+ (count-lines (point-min) start))) + (end (js-sline-comment-par-end)) + (offset (js-sline-comment-offset start-line)) + (text-offset (js-sline-comment-text-offset start-line))) + (save-excursion + (save-restriction + (narrow-to-region start end) + (goto-char (point-min)) + (while (re-search-forward "^[ \t]*//[ \t]*" nil t) + (replace-match "") + (forward-line 1)) + (let ((fill-paragraph-function nil) + (fill-column (- fill-column text-offset))) + (fill-paragraph justify)) + + ;; In Emacs 21.4 as opposed to CVS Emacs 22, + ;; `fill-paragraph' seems toadd a newline at the end of the + ;; paragraph. Remove it! + (goto-char (point-max)) + (when (looking-at "^$") (backward-delete-char 1)) + + (goto-char (point-min)) + (while (not (eobp)) + (indent-to offset) + (insert "//") + (indent-to text-offset) + (forward-line 1))))))) + + +(defun js-trailing-comment-p (parse-status) + "Return non-nil if inside a trailing comment. PARSE-STATUS is +the result of `parse-partial-regexp' from beginning of buffer to +point." + (save-excursion + (when (nth 4 parse-status) + (goto-char (nth 8 parse-status)) + (skip-chars-backward " \t") + (not (bolp))))) + + +(defun js-block-comment-p (parse-status) + "Return non-nil if inside a block comment. PARSE-STATUS is the +result of `parse-partial-regexp' from beginning of buffer to +point." + (save-excursion + (save-match-data + (when (nth 4 parse-status) + (goto-char (nth 8 parse-status)) + (looking-at "/\\*"))))) + + +(defun javascript-fill-paragraph (&optional justify) + "If inside a comment, fill the current comment paragraph. +Trailing comments are ignored." + (interactive) + (let ((parse-status (parse-partial-sexp (point-min) (point)))) + (when (and (nth 4 parse-status) + (not (js-trailing-comment-p parse-status))) + (if (js-block-comment-p parse-status) + (js-fill-block-comment-paragraph parse-status justify) + (js-fill-sline-comments parse-status justify)))) + t) + + +;; --- Imenu --- + +(defconst js-imenu-generic-expression + (list + (list + nil + "function\\s-+\\(\\w+\\)\\s-*(" + 1)) + "Regular expression matching top level procedures. Used by imenu.") + + +;; --- Main Function --- + +;;;###autoload +(defun javascript-mode () + "Major mode for editing JavaScript source text. + +Key bindings: + +\\{javascript-mode-map}" + (interactive) + (kill-all-local-variables) + + (use-local-map javascript-mode-map) + (set-syntax-table javascript-mode-syntax-table) + (set (make-local-variable 'indent-line-function) 'javascript-indent-line) + (set (make-local-variable 'font-lock-defaults) (list js-font-lock-keywords)) + + (set (make-local-variable 'parse-sexp-ignore-comments) t) + + ;; Comments + (setq comment-start "// ") + (setq comment-end "") + (set (make-local-variable 'fill-paragraph-function) + 'javascript-fill-paragraph) + + ;; Make c-mark-function work + (setq c-nonsymbol-token-regexp "!=\\|%=\\|&[&=]\\|\\*[/=]\\|\\+[+=]\\|-[=-]\\|/[*/=]\\|<\\(?:<=\\|[<=]\\)\\|==\\|>\\(?:>\\(?:>=\\|[=>]\\)\\|[=>]\\)\\|\\^=\\||[=|]\\|[]!%&(-,./:-?[{-~^-]" + c-stmt-delim-chars "^;{}?:" + c-syntactic-ws-end "[ \n \f/]" + c-syntactic-eol "\\(\\s \\|/\\*\\([^*\n ]\\|\\*[^/\n ]\\)*\\*/\\)*\\(\\(/\\*\\([^*\n ]\\|\\*[^/\n ]\\)*\\|\\\\\\)?$\\|//\\)") + + ;; Imenu + (setq imenu-case-fold-search nil) + (set (make-local-variable 'imenu-generic-expression) + js-imenu-generic-expression) + + (setq major-mode 'javascript-mode) + (setq mode-name "JavaScript") + (run-hooks 'javascript-mode-hook)) + + +(provide 'javascript-mode) +;;; javascript.el ends here diff --git a/.emacs.d/linux/.emacs b/.emacs.d/linux/.emacs new file mode 100644 index 0000000..991f9c9 --- /dev/null +++ b/.emacs.d/linux/.emacs @@ -0,0 +1 @@ +(set-default-font "-xos4-terminus-medium-*-*-*-14-*-*-*-*-*-*-*") \ No newline at end of file diff --git a/.emacs.d/popup.el b/.emacs.d/popup.el new file mode 100644 index 0000000..0f14dfe --- /dev/null +++ b/.emacs.d/popup.el @@ -0,0 +1,1061 @@ +;;; popup.el --- Visual popup interface + +;; Copyright (C) 2009, 2010 Tomohiro Matsuyama + +;; Author: Tomohiro Matsuyama +;; Keywords: lisp +;; Version: 0.4 + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; 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 +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; + +;;; Code: + +(eval-when-compile + (require 'cl)) + + + +;; Utilities + +(defvar popup-use-optimized-column-computation t + "Use optimized column computation routine. +If there is a problem, please set it to nil.") + +;; Borrowed from anything.el +(defmacro popup-aif (test-form then-form &rest else-forms) + "Anaphoric if. Temporary variable `it' is the result of test-form." + (declare (indent 2)) + `(let ((it ,test-form)) + (if it ,then-form ,@else-forms))) + +(defun popup-x-to-string (x) + "Convert any object to string effeciently. +This is faster than prin1-to-string in many cases." + (typecase x + (string x) + (symbol (symbol-name x)) + (integer (number-to-string x)) + (float (number-to-string x)) + (t (format "%s" x)))) + +(defun popup-substring-by-width (string width) + "Return cons of substring and remaining string by `WIDTH'." + ;; Expand tabs with 4 spaces + (setq string (replace-regexp-in-string "\t" " " string)) + (loop with len = (length string) + with w = 0 + for l from 0 + for c in (append string nil) + while (<= (incf w (char-width c)) width) + finally return + (if (< l len) + (cons (substring string 0 l) (substring string l)) + (list string)))) + +(defun popup-fill-string (string &optional width max-width justify squeeze) + "Split STRING into fixed width strings and return a cons cell like +\(WIDTH . ROWS). Here, the car WIDTH indicates the actual maxim width of ROWS. + +The argument WIDTH specifies the width of filling each paragraph. WIDTH nil +means don't perform any justification and word wrap. Note that this function +doesn't add any padding characters at the end of each row. + +MAX-WIDTH, if WIDTH is nil, specifies the maximum number of columns. + +The optional fourth argument JUSTIFY specifies which kind of justification +to do: `full', `left', `right', `center', or `none' (equivalent to nil). +A value of t means handle each paragraph as specified by its text properties. + +SQUEEZE nil means leave whitespaces other than line breaks untouched." + (if (eq width 0) + (error "Can't fill string with 0 width")) + (if width + (setq max-width width)) + (with-temp-buffer + (let ((tab-width 4) + (fill-column width) + (left-margin 0) + (kinsoku-limit 1) + indent-tabs-mode + row rows) + (insert string) + (untabify (point-min) (point-max)) + (if width + (fill-region (point-min) (point-max) justify (not squeeze))) + (goto-char (point-min)) + (setq width 0) + (while (prog2 + (let ((line (buffer-substring + (point) (progn (end-of-line) (point))))) + (if max-width + (while (progn + (setq row (truncate-string-to-width line max-width) + width (max width (string-width row))) + (push row rows) + (if (not (= (length row) (length line))) + (setq line (substring line (length row)))))) + (setq width (max width (string-width line))) + (push line rows))) + (< (point) (point-max)) + (beginning-of-line 2))) + (cons width (nreverse rows))))) + +(defmacro popup-save-buffer-state (&rest body) + (declare (indent 0)) + `(save-excursion + (let ((buffer-undo-list t) + (buffer-read-only nil) + (modified (buffer-modified-p))) + (unwind-protect + (progn ,@body) + (set-buffer-modified-p modified))))) + +(defun popup-preferred-width (list) + "Return preferred width of popup to show `LIST' beautifully." + (loop with tab-width = 4 + for item in list + for summary = (popup-item-summary item) + maximize (string-width (popup-x-to-string item)) into width + if (stringp summary) + maximize (+ (string-width summary) 2) into summary-width + finally return (* (ceiling (/ (+ (or width 0) (or summary-width 0)) 10.0)) 10))) + +;; window-full-width-p is not defined in Emacs 22.1 +(defun popup-window-full-width-p (&optional window) + (if (fboundp 'window-full-width-p) + (window-full-width-p window) + (= (window-width window) (frame-width (window-frame (or window (selected-window))))))) + +;; truncated-partial-width-window-p is not defined in Emacs 22 +(defun popup-truncated-partial-width-window-p (&optional window) + (unless window + (setq window (selected-window))) + (unless (popup-window-full-width-p window) + (let ((t-p-w-w (buffer-local-value 'truncate-partial-width-windows + (window-buffer window)))) + (if (integerp t-p-w-w) + (< (window-width window) t-p-w-w) + t-p-w-w)))) + +(defun popup-current-physical-column () + (or (when (and popup-use-optimized-column-computation + (eq (window-hscroll) 0)) + (let ((current-column (current-column))) + (if (or (popup-truncated-partial-width-window-p) + truncate-lines + (< current-column (window-width))) + current-column))) + (car (posn-col-row (posn-at-point))))) + +(defun popup-last-line-of-buffer-p () + (save-excursion (end-of-line) (/= (forward-line) 0))) + +(defun popup-lookup-key-by-event (function event) + (or (funcall function (vector event)) + (if (symbolp event) + (popup-aif (get event 'event-symbol-element-mask) + (funcall function (vector (logior (or (get (car it) 'ascii-character) 0) + (cadr it)))))))) + + + +;; Popup common + +(defgroup popup nil + "Visual popup interface" + :group 'lisp + :prefix "popup-") + +(defface popup-face + '((t (:background "lightgray" :foreground "black"))) + "Face for popup." + :group 'popup) + +(defface popup-scroll-bar-foreground-face + '((t (:background "black"))) + "Foreground face for scroll-bar." + :group 'popup) + +(defface popup-scroll-bar-background-face + '((t (:background "gray"))) + "Background face for scroll-bar." + :group 'popup) + +(defvar popup-instances nil + "Popup instances.") + +(defvar popup-scroll-bar-foreground-char + (propertize " " 'face 'popup-scroll-bar-foreground-face) + "Foreground character for scroll-bar.") + +(defvar popup-scroll-bar-background-char + (propertize " " 'face 'popup-scroll-bar-background-face) + "Background character for scroll-bar.") + +(defstruct popup + point row column width height min-height direction overlays + parent depth + face selection-face + margin-left margin-right margin-left-cancel scroll-bar symbol + cursor offset scroll-top current-height list newlines + pattern original-list) + +(defun popup-item-propertize (item &rest properties) + "Same to `propertize` but this avoids overriding existed value with `nil` property." + (let (props) + (while properties + (when (cadr properties) + (push (car properties) props) + (push (cadr properties) props)) + (setq properties (cddr properties))) + (apply 'propertize + (popup-x-to-string item) + (nreverse props)))) + +(defun popup-item-property (item property) + (if (stringp item) + (get-text-property 0 property item))) + +(defun* popup-make-item (name + &key + value + popup-face + selection-face + sublist + document + symbol + summary) + "Utility function to make popup item. +See also `popup-item-propertize'." + (popup-item-propertize name + 'value value + 'popup-face popup-face + 'selection-face selection-face + 'document document + 'symbol symbol + 'summary summary + 'sublist sublist)) + +(defsubst popup-item-value (item) (popup-item-property item 'value)) +(defsubst popup-item-value-or-self (item) (or (popup-item-value item) item)) +(defsubst popup-item-popup-face (item) (popup-item-property item 'popup-face)) +(defsubst popup-item-selection-face (item) (popup-item-property item 'selection-face)) +(defsubst popup-item-document (item) (popup-item-property item 'document)) +(defsubst popup-item-summary (item) (popup-item-property item 'summary)) +(defsubst popup-item-symbol (item) (popup-item-property item 'symbol)) +(defsubst popup-item-sublist (item) (popup-item-property item 'sublist)) + +(defun popup-item-documentation (item) + (let ((doc (popup-item-document item))) + (if (functionp doc) + (setq doc (funcall doc (popup-item-value-or-self item)))) + doc)) + +(defun popup-item-show-help-1 (item) + (let ((doc (popup-item-documentation item))) + (when doc + (with-current-buffer (get-buffer-create " *Popup Help*") + (erase-buffer) + (insert doc) + (goto-char (point-min)) + (display-buffer (current-buffer))) + t))) + +(defun popup-item-show-help (item &optional persist) + (when item + (if (not persist) + (save-window-excursion + (when (popup-item-show-help-1 item) + (block nil + (while t + (clear-this-command-keys) + (let ((key (read-key-sequence-vector nil))) + (case (key-binding key) + ('scroll-other-window + (scroll-other-window)) + ('scroll-other-window-down + (scroll-other-window-down nil)) + (t + (setq unread-command-events (append key unread-command-events)) + (return)))))))) + (popup-item-show-help-1 item)))) + +(defun popup-set-list (popup list) + (popup-set-filtered-list popup list) + (setf (popup-pattern popup) nil) + (setf (popup-original-list popup) list)) + +(defun popup-set-filtered-list (popup list) + (setf (popup-list popup) list + (popup-offset popup) (if (> (popup-direction popup) 0) + 0 + (max (- (popup-height popup) (length list)) 0)))) + +(defun popup-selected-item (popup) + (nth (popup-cursor popup) (popup-list popup))) + +(defun popup-selected-line (popup) + (- (popup-cursor popup) (popup-scroll-top popup))) + +(defun popup-line-overlay (popup line) + (aref (popup-overlays popup) line)) + +(defun popup-selected-line-overlay (popup) + (popup-line-overlay popup (popup-selected-line popup))) + +(defun popup-hide-line (popup line) + (let ((overlay (popup-line-overlay popup line))) + (overlay-put overlay 'display nil) + (overlay-put overlay 'after-string nil))) + +(defun popup-line-hidden-p (popup line) + (let ((overlay (popup-line-overlay popup line))) + (and (eq (overlay-get overlay 'display) nil) + (eq (overlay-get overlay 'after-string) nil)))) + +(defun popup-set-line-item (popup line item face margin-left margin-right scroll-bar-char symbol summary) + (let* ((overlay (popup-line-overlay popup line)) + (content (popup-create-line-string popup (popup-x-to-string item) margin-left margin-right symbol summary)) + (start 0) + (prefix (overlay-get overlay 'prefix)) + (postfix (overlay-get overlay 'postfix)) + end) + ;; Overlap face properties + (if (get-text-property start 'face content) + (setq start (next-single-property-change start 'face content))) + (while (and start (setq end (next-single-property-change start 'face content))) + (put-text-property start end 'face face content) + (setq start (next-single-property-change end 'face content))) + (if start + (put-text-property start (length content) 'face face content)) + (unless (overlay-get overlay 'dangle) + (overlay-put overlay 'display (concat prefix (substring content 0 1))) + (setq prefix nil + content (concat (substring content 1)))) + (overlay-put overlay + 'after-string + (concat prefix + content + scroll-bar-char + postfix)))) + +(defun popup-create-line-string (popup string margin-left margin-right symbol summary) + (let* ((popup-width (popup-width popup)) + (summary-width (string-width summary)) + (string (car (popup-substring-by-width string + (- popup-width + (if (> summary-width 0) + (+ summary-width 2) + 0))))) + (string-width (string-width string))) + (concat margin-left + string + (make-string (max (- popup-width string-width summary-width) 0) ? ) + summary + symbol + margin-right))) + +(defun popup-live-p (popup) + (and popup (popup-overlays popup) t)) + +(defun popup-child-point (popup &optional offset) + (overlay-end (popup-line-overlay popup + (or offset + (popup-selected-line popup))))) + +(defun* popup-create (point + width + height + &key + min-height + around + (face 'popup-face) + (selection-face face) + scroll-bar + margin-left + margin-right + symbol + parent + parent-offset) + (or margin-left (setq margin-left 0)) + (or margin-right (setq margin-right 0)) + (unless point + (setq point + (if parent (popup-child-point parent parent-offset) (point)))) + + (save-excursion + (goto-char point) + (let* ((row (line-number-at-pos)) + (column (popup-current-physical-column)) + (overlays (make-vector height nil)) + (popup-width (+ width + (if scroll-bar 1 0) + margin-left + margin-right + (if symbol 2 0))) + margin-left-cancel + (window (selected-window)) + (window-start (window-start)) + (window-hscroll (window-hscroll)) + (window-width (window-width)) + (right (+ column popup-width)) + (overflow (and (> right window-width) + (>= right popup-width))) + (foldable (and (null parent) + (>= column popup-width))) + (direction (or + ;; Currently the direction of cascade popup won't be changed + (and parent (popup-direction parent)) + + ;; Calculate direction + (if (and (> row height) + (> height (- (max 1 (- (window-height) + (if mode-line-format 1 0) + (if header-line-format 1 0))) + (count-lines window-start (point))))) + -1 + 1))) + (depth (if parent (1+ (popup-depth parent)) 0)) + (newlines (max 0 (+ (- height (count-lines point (point-max))) (if around 1 0)))) + current-column) + (when (> newlines 0) + (popup-save-buffer-state + (goto-char (point-max)) + (insert (make-string newlines ?\n)))) + + (if overflow + (if foldable + (progn + (decf column (- popup-width margin-left margin-right)) + (unless around (move-to-column column))) + (when (not truncate-lines) + ;; Cut out overflow + (let ((d (1+ (- popup-width (- window-width column))))) + (decf popup-width d) + (decf width d))) + (decf column margin-left)) + (decf column margin-left)) + (when (and (null parent) + (< column 0)) + ;; Cancel margin left + (setq column 0) + (decf popup-width margin-left) + (setq margin-left-cancel t)) + + (dotimes (i height) + (let (overlay begin w (dangle t) (prefix "") (postfix "")) + (when around + (if (>= emacs-major-version 23) + (vertical-motion (cons column direction)) + (vertical-motion direction) + (move-to-column (+ (current-column) column)))) + (setq around t + current-column (popup-current-physical-column)) + + (when (> current-column column) + (backward-char) + (setq current-column (popup-current-physical-column))) + (when (< current-column column) + ;; Extend short buffer lines by popup prefix (line of spaces) + (setq prefix (make-string (+ (if (= current-column 0) + (- window-hscroll (current-column)) + 0) + (- column current-column)) + ? ))) + + (setq begin (point)) + (setq w (+ popup-width (length prefix))) + (while (and (not (eolp)) (> w 0)) + (setq dangle nil) + (decf w (char-width (char-after))) + (forward-char)) + (if (< w 0) + (setq postfix (make-string (- w) ? ))) + + (setq overlay (make-overlay begin (point))) + (overlay-put overlay 'window window) + (overlay-put overlay 'dangle dangle) + (overlay-put overlay 'prefix prefix) + (overlay-put overlay 'postfix postfix) + (overlay-put overlay 'width width) + (aset overlays + (if (> direction 0) i (- height i 1)) + overlay))) + (loop for p from (- 10000 (* depth 1000)) + for overlay in (nreverse (append overlays nil)) + do (overlay-put overlay 'priority p)) + (let ((it (make-popup :point point + :row row + :column column + :width width + :height height + :min-height min-height + :direction direction + :parent parent + :depth depth + :face face + :selection-face selection-face + :margin-left margin-left + :margin-right margin-right + :margin-left-cancel margin-left-cancel + :scroll-bar scroll-bar + :symbol symbol + :cursor 0 + :scroll-top 0 + :current-height 0 + :list nil + :newlines newlines + :overlays overlays))) + (push it popup-instances) + it)))) + +(defun popup-delete (popup) + (when (popup-live-p popup) + (popup-hide popup) + (mapc 'delete-overlay (popup-overlays popup)) + (setf (popup-overlays popup) nil) + (setq popup-instances (delq popup popup-instances)) + (let ((newlines (popup-newlines popup))) + (when (> newlines 0) + (popup-save-buffer-state + (goto-char (point-max)) + (dotimes (i newlines) + (if (= (char-before) ?\n) + (delete-char -1))))))) + nil) + +(defun popup-draw (popup) + (loop with height = (popup-height popup) + with min-height = (popup-min-height popup) + with popup-face = (popup-face popup) + with selection-face = (popup-selection-face popup) + with list = (popup-list popup) + with length = (length list) + with thum-size = (max (/ (* height height) (max length 1)) 1) + with page-size = (/ (+ 0.0 (max length 1)) height) + with scroll-bar = (popup-scroll-bar popup) + with margin-left = (make-string (if (popup-margin-left-cancel popup) 0 (popup-margin-left popup)) ? ) + with margin-right = (make-string (popup-margin-right popup) ? ) + with symbol = (popup-symbol popup) + with cursor = (popup-cursor popup) + with scroll-top = (popup-scroll-top popup) + with offset = (popup-offset popup) + for o from offset + for i from scroll-top + while (< o height) + for item in (nthcdr scroll-top list) + for page-index = (* thum-size (/ o thum-size)) + for face = (if (= i cursor) + (or (popup-item-selection-face item) selection-face) + (or (popup-item-popup-face item) popup-face)) + for empty-char = (propertize " " 'face face) + for scroll-bar-char = (if scroll-bar + (cond + ((<= page-size 1) + empty-char) + ((and (> page-size 1) + (>= cursor (* page-index page-size)) + (< cursor (* (+ page-index thum-size) page-size))) + popup-scroll-bar-foreground-char) + (t + popup-scroll-bar-background-char)) + "") + for sym = (if symbol + (concat " " (or (popup-item-symbol item) " ")) + "") + for summary = (or (popup-item-summary item) "") + + do + ;; Show line and set item to the line + (popup-set-line-item popup o item face margin-left margin-right scroll-bar-char sym summary) + + finally + ;; Remember current height + (setf (popup-current-height popup) (- o offset)) + + ;; Hide remaining lines + (let ((scroll-bar-char (if scroll-bar (propertize " " 'face popup-face) "")) + (symbol (if symbol " " ""))) + (if (> (popup-direction popup) 0) + (progn + (when min-height + (while (< o min-height) + (popup-set-line-item popup o "" popup-face margin-left margin-right scroll-bar-char symbol "") + (incf o))) + (while (< o height) + (popup-hide-line popup o) + (incf o))) + (loop with h = (if min-height (- height min-height) offset) + for o from 0 below offset + if (< o h) + do (popup-hide-line popup o) + if (>= o h) + do (popup-set-line-item popup o "" popup-face margin-left margin-right scroll-bar-char symbol "")))))) + +(defun popup-hide (popup) + (dotimes (i (popup-height popup)) + (popup-hide-line popup i))) + +(defun popup-hidden-p (popup) + (let ((hidden t)) + (when (popup-live-p popup) + (dotimes (i (popup-height popup)) + (unless (popup-line-hidden-p popup i) + (setq hidden nil)))) + hidden)) + +(defun popup-select (popup i) + (setq i (+ i (popup-offset popup))) + (when (and (<= 0 i) (< i (popup-height popup))) + (setf (popup-cursor popup) i) + (popup-draw popup) + t)) + +(defun popup-next (popup) + (let ((height (popup-height popup)) + (cursor (1+ (popup-cursor popup))) + (scroll-top (popup-scroll-top popup)) + (length (length (popup-list popup)))) + (cond + ((>= cursor length) + ;; Back to first page + (setq cursor 0 + scroll-top 0)) + ((= cursor (+ scroll-top height)) + ;; Go to next page + (setq scroll-top (min (1+ scroll-top) (max (- length height) 0))))) + (setf (popup-cursor popup) cursor + (popup-scroll-top popup) scroll-top) + (popup-draw popup))) + +(defun popup-previous (popup) + (let ((height (popup-height popup)) + (cursor (1- (popup-cursor popup))) + (scroll-top (popup-scroll-top popup)) + (length (length (popup-list popup)))) + (cond + ((< cursor 0) + ;; Go to last page + (setq cursor (1- length) + scroll-top (max (- length height) 0))) + ((= cursor (1- scroll-top)) + ;; Go to previous page + (decf scroll-top))) + (setf (popup-cursor popup) cursor + (popup-scroll-top popup) scroll-top) + (popup-draw popup))) + +(defun popup-scroll-down (popup &optional n) + (let ((scroll-top (min (+ (popup-scroll-top popup) (or n 1)) + (- (length (popup-list popup)) (popup-height popup))))) + (setf (popup-cursor popup) scroll-top + (popup-scroll-top popup) scroll-top) + (popup-draw popup))) + +(defun popup-scroll-up (popup &optional n) + (let ((scroll-top (max (- (popup-scroll-top popup) (or n 1)) + 0))) + (setf (popup-cursor popup) scroll-top + (popup-scroll-top popup) scroll-top) + (popup-draw popup))) + + + +;; Popup isearch + +(defface popup-isearch-match + '((t (:background "sky blue"))) + "Popup isearch match face." + :group 'popup) + +(defvar popup-isearch-cursor-color "blue") + +(defvar popup-isearch-keymap + (let ((map (make-sparse-keymap))) + ;(define-key map "\r" 'popup-isearch-done) + (define-key map "\C-g" 'popup-isearch-cancel) + (define-key map "\C-h" 'popup-isearch-delete) + (define-key map (kbd "DEL") 'popup-isearch-delete) + map)) + +(defsubst popup-isearch-char-p (char) + (and (integerp char) + (<= 32 char) + (<= char 126))) + +(defun popup-isearch-filter-list (pattern list) + (loop with regexp = (regexp-quote pattern) + for item in list + do + (unless (stringp item) + (setq item (popup-item-propertize (popup-x-to-string item) + 'value item))) + if (string-match regexp item) + collect (let ((beg (match-beginning 0)) + (end (match-end 0))) + (alter-text-property 0 (length item) 'face + (lambda (prop) + (unless (eq prop 'popup-isearch-match) + prop)) + item) + (put-text-property beg end + 'face 'popup-isearch-match + item) + item))) + +(defun popup-isearch-prompt (popup pattern) + (format "Pattern: %s" (if (= (length (popup-list popup)) 0) + (propertize pattern 'face 'isearch-fail) + pattern))) + +(defun popup-isearch-update (popup pattern &optional callback) + (setf (popup-cursor popup) 0 + (popup-scroll-top popup) 0 + (popup-pattern popup) pattern) + (let ((list (popup-isearch-filter-list pattern (popup-original-list popup)))) + (popup-set-filtered-list popup list) + (if callback + (funcall callback list))) + (popup-draw popup)) + +(defun* popup-isearch (popup + &key + (cursor-color popup-isearch-cursor-color) + (keymap popup-isearch-keymap) + callback + help-delay) + (let ((list (popup-original-list popup)) + (pattern (or (popup-pattern popup) "")) + (old-cursor-color (frame-parameter (selected-frame) 'cursor-color)) + prompt key binding done) + (unwind-protect + (unless (block nil + (if cursor-color + (set-cursor-color cursor-color)) + (while t + (setq prompt (popup-isearch-prompt popup pattern)) + (setq key (popup-menu-read-key-sequence keymap prompt help-delay)) + (if (null key) + (unless (funcall popup-menu-show-quick-help-function popup nil :prompt prompt) + (clear-this-command-keys) + (push (read-event prompt) unread-command-events)) + (setq binding (lookup-key keymap key)) + (cond + ((and (stringp key) + (popup-isearch-char-p (aref key 0))) + (setq pattern (concat pattern key))) + ((eq binding 'popup-isearch-done) + (return t)) + ((eq binding 'popup-isearch-cancel) + (return nil)) + ((eq binding 'popup-isearch-delete) + (if (> (length pattern) 0) + (setq pattern (substring pattern 0 (1- (length pattern)))))) + (t + (setq unread-command-events + (append (listify-key-sequence key) unread-command-events)) + (return t))) + (popup-isearch-update popup pattern callback)))) + (popup-isearch-update popup "" callback) + t) ; Return non-nil if isearch is cancelled + (if old-cursor-color + (set-cursor-color old-cursor-color))))) + + + +;; Popup tip + +(defface popup-tip-face + '((t (:background "khaki1" :foreground "black"))) + "Face for popup tip." + :group 'popup) + +(defvar popup-tip-max-width 80) + +(defun* popup-tip (string + &key + point + (around t) + width + (height 15) + min-height + truncate + margin + margin-left + margin-right + scroll-bar + parent + parent-offset + nowait + prompt + &aux tip lines) + (if (bufferp string) + (setq string (with-current-buffer string (buffer-string)))) + ;; TODO strip text (mainly face) properties + (setq string (substring-no-properties string)) + + (and (eq margin t) (setq margin 1)) + (or margin-left (setq margin-left margin)) + (or margin-right (setq margin-right margin)) + + (let ((it (popup-fill-string string width popup-tip-max-width))) + (setq width (car it) + lines (cdr it))) + + (setq tip (popup-create point width height + :min-height min-height + :around around + :margin-left margin-left + :margin-right margin-right + :scroll-bar scroll-bar + :face 'popup-tip-face + :parent parent + :parent-offset parent-offset)) + + (unwind-protect + (when (> (popup-width tip) 0) ; not to be corrupted + (when (and (not (eq width (popup-width tip))) ; truncated + (not truncate)) + ;; Refill once again to lines be fitted to popup width + (setq width (popup-width tip)) + (setq lines (cdr (popup-fill-string string width width)))) + + (popup-set-list tip lines) + (popup-draw tip) + (if nowait + tip + (clear-this-command-keys) + (push (read-event prompt) unread-command-events) + t)) + (unless nowait + (popup-delete tip)))) + + + +;; Popup menu + +(defface popup-menu-face + '((t (:background "lightgray" :foreground "black"))) + "Face for popup menu." + :group 'popup) + +(defface popup-menu-selection-face + '((t (:background "steelblue" :foreground "white"))) + "Face for popup menu selection." + :group 'popup) + +(defvar popup-menu-show-tip-function 'popup-tip + "Function used for showing tooltip by `popup-menu-show-quick-help'.") + +(defvar popup-menu-show-quick-help-function 'popup-menu-show-quick-help + "Function used for showing quick help by `popup-menu*'.") + +(defun popup-menu-show-help (menu &optional persist item) + (popup-item-show-help (or item (popup-selected-item menu)) persist)) + +(defun popup-menu-documentation (menu &optional item) + (popup-item-documentation (or item (popup-selected-item menu)))) + +(defun popup-menu-show-quick-help (menu &optional item &rest args) + (let* ((point (plist-get args :point)) + (height (or (plist-get args :height) (popup-height menu))) + (min-height (min height (popup-current-height menu))) + (around nil) + (parent-offset (popup-offset menu)) + (doc (popup-menu-documentation menu item))) + (when (stringp doc) + (if (popup-hidden-p menu) + (setq around t + menu nil + parent-offset nil) + (setq point nil)) + (let ((popup-use-optimized-column-computation nil)) ; To avoid wrong positioning + (apply popup-menu-show-tip-function + doc + :point point + :height height + :min-height min-height + :around around + :parent menu + :parent-offset parent-offset + args))))) + +(defun popup-menu-read-key-sequence (keymap &optional prompt timeout) + (catch 'timeout + (let ((timer (and timeout + (run-with-timer timeout nil + (lambda () + (if (zerop (length (this-command-keys))) + (throw 'timeout nil)))))) + (old-global-map (current-global-map)) + (temp-global-map (make-sparse-keymap)) + (overriding-terminal-local-map (make-sparse-keymap))) + (substitute-key-definition 'keyboard-quit 'keyboard-quit + temp-global-map old-global-map) + (define-key temp-global-map [menu-bar] (lookup-key old-global-map [menu-bar])) + (define-key temp-global-map [tool-bar] (lookup-key old-global-map [tool-bar])) + (set-keymap-parent overriding-terminal-local-map keymap) + (if (current-local-map) + (define-key overriding-terminal-local-map [menu-bar] + (lookup-key (current-local-map) [menu-bar]))) + (unwind-protect + (progn + (use-global-map temp-global-map) + (clear-this-command-keys) + (with-temp-message prompt + (read-key-sequence nil))) + (use-global-map old-global-map) + (if timer (cancel-timer timer)))))) + +(defun popup-menu-fallback (event default)) + +(defun* popup-menu-event-loop (menu keymap fallback &optional prompt help-delay isearch isearch-cursor-color isearch-keymap isearch-callback &aux key binding) + (block nil + (while (popup-live-p menu) + (and isearch + (popup-isearch menu + :cursor-color isearch-cursor-color + :keymap isearch-keymap + :callback isearch-callback + :help-delay help-delay) + (keyboard-quit)) + (setq key (popup-menu-read-key-sequence keymap prompt help-delay)) + (if (null key) + (unless (funcall popup-menu-show-quick-help-function menu nil :prompt prompt) + (clear-this-command-keys) + (push (read-event prompt) unread-command-events)) + (if (eq (lookup-key (current-global-map) key) 'keyboard-quit) + (keyboard-quit)) + (setq binding (lookup-key keymap key)) + (cond + ((eq binding 'popup-close) + (if (popup-parent menu) + (return))) + ((memq binding '(popup-select popup-open)) + (let* ((item (popup-selected-item menu)) + (sublist (popup-item-sublist item))) + (if sublist + (popup-aif (popup-cascade-menu sublist + :around nil + :parent menu + :margin-left (popup-margin-left menu) + :margin-right (popup-margin-right menu) + :scroll-bar (popup-scroll-bar menu)) + (and it (return it))) + (if (eq binding 'popup-select) + (return (popup-item-value-or-self item)))))) + ((eq binding 'popup-next) + (popup-next menu)) + ((eq binding 'popup-previous) + (popup-previous menu)) + ((eq binding 'popup-help) + (popup-menu-show-help menu)) + ((eq binding 'popup-isearch) + (popup-isearch menu + :cursor-color isearch-cursor-color + :keymap isearch-keymap + :callback isearch-callback + :help-delay help-delay)) + ((commandp binding) + (call-interactively binding)) + (t + (funcall fallback key (key-binding key)))))))) + +;; popup-menu is used by mouse.el unfairly... +(defun* popup-menu* (list + &key + point + (around t) + (width (popup-preferred-width list)) + (height 15) + margin + margin-left + margin-right + scroll-bar + symbol + parent + parent-offset + (keymap popup-menu-keymap) + (fallback 'popup-menu-fallback) + help-delay + prompt + isearch + (isearch-cursor-color popup-isearch-cursor-color) + (isearch-keymap popup-isearch-keymap) + isearch-callback + &aux menu event) + (and (eq margin t) (setq margin 1)) + (or margin-left (setq margin-left margin)) + (or margin-right (setq margin-right margin)) + (if (and scroll-bar + (integerp margin-right) + (> margin-right 0)) + ;; Make scroll-bar space as margin-right + (decf margin-right)) + (setq menu (popup-create point width height + :around around + :face 'popup-menu-face + :selection-face 'popup-menu-selection-face + :margin-left margin-left + :margin-right margin-right + :scroll-bar scroll-bar + :symbol symbol + :parent parent)) + (unwind-protect + (progn + (popup-set-list menu list) + (popup-draw menu) + (popup-menu-event-loop menu keymap fallback prompt help-delay isearch + isearch-cursor-color isearch-keymap isearch-callback)) + (popup-delete menu))) + +(defun popup-cascade-menu (list &rest args) + "Same to `popup-menu', but an element of `LIST' can be +list of submenu." + (apply 'popup-menu* + (mapcar (lambda (item) + (if (consp item) + (popup-make-item (car item) + :sublist (cdr item) + :symbol ">") + item)) + list) + :symbol t + args)) + +(defvar popup-menu-keymap + (let ((map (make-sparse-keymap))) + (define-key map "\r" 'popup-select) + (define-key map "\C-f" 'popup-open) + (define-key map [right] 'popup-open) + (define-key map "\C-b" 'popup-close) + (define-key map [left] 'popup-close) + + (define-key map "\C-n" 'popup-next) + (define-key map [down] 'popup-next) + (define-key map "\C-p" 'popup-previous) + (define-key map [up] 'popup-previous) + + (define-key map [f1] 'popup-help) + (define-key map (kbd "\C-?") 'popup-help) + + (define-key map "\C-s" 'popup-isearch) + map)) + +(provide 'popup) +;;; popup.el ends here diff --git a/.emacs.d/popup.elc b/.emacs.d/popup.elc new file mode 100644 index 0000000000000000000000000000000000000000..e0acbfd9f8c7fa81480b5bae40c23b915578ea5e GIT binary patch literal 64893 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 literal 0 HcmV?d00001 diff --git a/.emacs.d/slash_c.el b/.emacs.d/slash_c.el new file mode 100644 index 0000000..b8d35fe --- /dev/null +++ b/.emacs.d/slash_c.el @@ -0,0 +1,15 @@ +(if (not (intern-soft "cc-mode")) + (require 'cc-mode)) + +(global-set-key [(f9)] 'compile) ; make F9 call the compilation command +(setq compilation-window-height 8) ; make the compilation window smaller + +;; Make compilation window disappear on succesful build +(setq compilation-finish-function + (lambda (buf str) + (if (string-match "exited abnormally" str) + ;; there were errors + (message "compilation errors, press C-x ` to visit") + ;; no errors, make the compilation window go away in 0.5 seconds + (run-at-time 0.5 nil 'delete-windows-on buf) + (message "NO COMPILATION ERRORS!")))) \ No newline at end of file diff --git a/.emacs.d/slash_functions.el b/.emacs.d/slash_functions.el new file mode 100644 index 0000000..fa27bb7 --- /dev/null +++ b/.emacs.d/slash_functions.el @@ -0,0 +1,5 @@ +(defun what-face (pos) + (interactive "d") + (let ((face (or (get-char-property (point) 'read-face-name) + (get-char-property (point) 'face)))) + (if face (message "Face: %s" face) (message "No face at %d" pos)))) \ No newline at end of file diff --git a/.emacs.d/slash_python.el b/.emacs.d/slash_python.el new file mode 100644 index 0000000..4cb2a72 --- /dev/null +++ b/.emacs.d/slash_python.el @@ -0,0 +1,17 @@ +;; Pyflakes +(when (load "flymake" t) + (defun flymake-pyflakes-init () + (let* ((temp-file (flymake-init-create-temp-buffer-copy + 'flymake-create-temp-inplace)) + (local-file (file-relative-name + temp-file + (file-name-directory buffer-file-name)))) + (list "pyflakes" (list local-file)))) + + (add-to-list 'flymake-allowed-file-name-masks + '("\\.py\\'" flymake-pyflakes-init))) +(add-hook 'find-file-hook 'flymake-find-file-hook) + +;; Bind RET to py-newline-and-indent +(add-hook 'python-mode-hook '(lambda () + (define-key python-mode-map "\C-m" 'newline-and-indent))) \ No newline at end of file diff --git a/.emacs.d/slash_theme.el b/.emacs.d/slash_theme.el new file mode 100644 index 0000000..f0150f9 --- /dev/null +++ b/.emacs.d/slash_theme.el @@ -0,0 +1,35 @@ +(add-to-list 'load-path "~/.emacs.d") +(require 'color-theme) + +;; weirdness color-theme +(defun color-theme-weirdness () + (interactive) + (color-theme-install + '(color-theme-weirdness + ((background-color . "#000000") + (background-mode . dark) + (border-color . "#000000") + (cursor-color . "#FFFFFF") + (foreground-color . "#FFFFFF") + (mouse-color . "#000000")) + (org-level-1 ((t (:foreground "#5BFD5B" :weight normal)))) + (org-level-2 ((t (:foreground "#379A37" :weight normal)))) + (org-level-3 ((t (:foreground "#757575" :weight normal)))) + (org-level-4 ((t (:foreground "#778899" :weight normal)))) + (org-level-5 ((t (:foreground "#9898FF" :weight normal)))) + (org-level-6 ((t (:foreground "#0000B0" :weight normal)))) + (org-level-7 ((t (:foreground "#740091" :weight normal)))) + (org-level-8 ((t (:foreground "#B275C1" :weight normal)))) + (fringe ((t (:background "#000000")))) + (mode-line ((t (:foreground "#B3B3B3" :background "#43527A")))) + (region ((t (:background "#3D3D3D")))) + (minibuffer-prompt ((t (:foreground "#72F3FF" :bold t)))) + (font-lock-builtin-face ((t (:foreground "#C436C4")))) + (font-lock-comment-face ((t (:foreground "#427240" :bold t)))) + (font-lock-function-name-face ((t (:foreground "#0FFF28")))) + (font-lock-keyword-face ((t (:foreground "#6B84FF")))) + (font-lock-string-face ((t (:foreground "#E00900")))) + (font-lock-type-face ((t (:foreground "#8522DD")))) + (font-lock-variable-name-face ((t (:foreground "#18EFF2")))) + (font-lock-warning-face ((t (:foreground "#FF0000" :bold t))))))) +(provide 'color-theme-weirdness) \ No newline at end of file diff --git a/.emacs.d/sqlplus.el b/.emacs.d/sqlplus.el new file mode 100644 index 0000000..4d5e7d7 --- /dev/null +++ b/.emacs.d/sqlplus.el @@ -0,0 +1,5151 @@ +;;; sqlplus.el --- User friendly interface to SQL*Plus and support for PL/SQL compilation + +;; Copyright (C) 2007, 2008 Peter Karpiuk, Scott Tiger S.A. + +;; Author: Peter Karpiuk +;; Maintainer: Peter Karpiuk +;; Created: 25 Nov 2007 +;; Version 0.9.0 +;; Keywords: sql sqlplus oracle plsql + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 2, or (at your +;; option) any later version. + +;; GNU Emacs 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 GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;;; Commentary: + +;; Facilitates interaction with Oracle via SQL*Plus (GNU Emacs only). +;; Moreover, this package complements plsql.el (Kahlil Hodgson) +;; upon convenient compilation of PL/SQL source files. +;; +;; This package was inspired by sqlplus-mode.el (Rob Riepel, Peter +;; D. Pezaris, Martin Schwenke), but offers more features: +;; - tables are parsed, formatted and rendered with colors, like in +;; many GUI programs; you can see raw SQL*Plus output also, +;; if you wish +;; - table will be cutted if you try to fetch too many rows +;; (SELECT * FROM MY_MILLION_ROWS_TABLE); current SQL*Plus command +;; will be automatically interrupted under the hood in such cases +;; - you can use many SQL*Plus processes simultaneously, +;; - font locking (especially if you use Emacs>=22), with database +;; object names highlighting, +;; - history (log) of executed commands - see` sqlplus-history-dir` +;; variable, +;; - commands for fetching any database object definition +;; (package, table/index/sequence script) +;; - query result can be shown in HTML, +;; - input buffer for each connection can be saved into file on +;; disconnect and automatically restored on next connect (see +;; 'sqlplus-session-cache-dir' variable); if you place some +;; SQL*Plus commands between '/* init */' and '/* end */' +;; comments in saved input buffer, they will be automatically +;; executed on every connect +;; - if you use plsql.el for editing PL/SQL files, you can compile +;; such sources everytime with C-cC-c; error messages will be +;; parsed and displayed for easy source navigation +;; - M-. or C-mouse-1 on database object name will go to definition +;; in filesystem (use arrow button on toolbar to go back) +;; +;; The following commands should be added to a global initialization +;; file or to any user's .emacs file to conveniently use +;; sqlplus-mode: +;; +;; (require 'sqlplus) +;; (add-to-list 'auto-mode-alist '("\\.sqp\\'" . sqlplus-mode)) +;; +;; If you want PL/SQL support also, try something like this: +;; +;; (require 'plsql) +;; (setq auto-mode-alist +;; (append '(("\\.pls\\'" . plsql-mode) ("\\.pkg\\'" . plsql-mode) +;; ("\\.pks\\'" . plsql-mode) ("\\.pkb\\'" . plsql-mode) +;; ("\\.sql\\'" . plsql-mode) ("\\.PLS\\'" . plsql-mode) +;; ("\\.PKG\\'" . plsql-mode) ("\\.PKS\\'" . plsql-mode) +;; ("\\.PKB\\'" . plsql-mode) ("\\.SQL\\'" . plsql-mode) +;; ("\\.prc\\'" . plsql-mode) ("\\.fnc\\'" . plsql-mode) +;; ("\\.trg\\'" . plsql-mode) ("\\.vw\\'" . plsql-mode) +;; ("\\.PRC\\'" . plsql-mode) ("\\.FNC\\'" . plsql-mode) +;; ("\\.TRG\\'" . plsql-mode) ("\\.VW\\'" . plsql-mode)) +;; auto-mode-alist )) +;; +;; M-x sqlplus will start new SQL*Plus session. +;; +;; C-RET execute command under point +;; S-C-RET execute command under point and show result table in HTML +;; buffer +;; M-RET explain execution plan for command under point +;; M-. or C-mouse-1: find database object definition (table, view +;; index, synonym, trigger, procedure, function, package) +;; in filesystem +;; C-cC-s show database object definition (retrieved from database) +;; +;; Use describe-mode while in sqlplus-mode for further instructions. +;; +;; Many useful commands are defined in orcl-mode minor mode, which is +;; common for input and otput SQL*Plus buffers, as well as PL/SQL +;; buffers. +;; +;; For twiddling, see 'sqlplus' customization group. +;; +;; If you find this package useful, send me a postcard to address: +;; +;; Peter Karpiuk +;; Scott Tiger S.A. +;; ul. Gawinskiego 8 +;; 01-645 Warsaw +;; Poland + +;;; Known bugs: + +;; 1. Result of SQL select command can be messed up if some columns +;; has newline characters. To avoid this, execute SQL*Plus command +;; column truncated +;; before such select + +;;; Code: + +(require 'recentf) +(require 'font-lock) +(require 'cl) +(require 'sql) +(require 'tabify) +(require 'skeleton) + +(defconst sqlplus-revision "$Revision: 1.7 $") + +;;; Variables - + +(defgroup sqlplus nil + "SQL*Plus" + :group 'tools + :version 21) + +(defcustom plsql-auto-parse-errors-flag t + "Non nil means parse PL/SQL compilation results and show them in the compilation buffer." + :group 'sqlplus + :type '(boolean)) + +(defcustom sqlplus-init-sequence-start-regexp "/\\* init \\*/" + "SQL*Plus start of session init command sequence." + :group 'sqlplus + :type '(regexp)) + +(defcustom sqlplus-init-sequence-end-regexp "/\\* end \\*/" + "SQL*Plus end of session init command sequence." + :group 'sqlplus + :type '(regexp)) + +(defcustom sqlplus-explain-plan-warning-regexps '("TABLE ACCESS FULL" "INDEX FULL SCAN") + "SQL*Plus explain plan warning regexps" + :group 'sqlplus + :type '(repeat regexp)) + +(defcustom sqlplus-syntax-faces + '((schema font-lock-type-face nil) + (table font-lock-type-face ("dual")) + (synonym font-lock-type-face nil) + (view font-lock-type-face nil) + (column font-lock-constant-face nil) + (sequence font-lock-type-face nil) + (package font-lock-type-face nil) + (trigger font-lock-type-face nil) + (index font-lock-type-face) nil) + "Font lock configuration for database object names in current schema. +This is alist, and each element looks like (SYMBOL FACE LIST) +where SYMBOL is one of: schema, table, synonym, view, column, +sequence, package, trigger, index. Database objects means only +objects from current schema, so if you want syntax highlighting +for other objects (eg. 'dual' table name), you can explicitly +enumerate them in LIST as strings." + :group 'sqlplus + :tag "Oracle SQL Syntax Faces" + :type '(repeat (list symbol face (repeat string)))) + +(defcustom sqlplus-output-buffer-max-size (* 50 1000 1000) + "Maximum size of SQL*Plus output buffer. +After exceeding oldest results are deleted." + :group 'sqlplus + :tag "SQL*Plus Output Buffer Max Size" + :type '(integer)) + +(defcustom sqlplus-select-result-max-col-width nil + "Maximum width of column in displayed database table, or nil if there is no limit. +If any cell value is longer, it will be cutted and terminated with ellipsis ('...')." + :group 'sqlplus + :tag "SQL*Plus Select Result Max Column Width" + :type '(choice integer (const nil))) + +(defcustom sqlplus-format-output-tables-flag t + "Non-nil means format result if it looks like database table." + :group 'sqlplus + :tag "SQL*Plus Format Output Table" + :type '(boolean)) + +(defcustom sqlplus-kill-processes-without-query-on-exit-flag t + "Non-nil means silently kill all SQL*Plus processes on Emacs exit." + :group 'sqlplus + :tag "SQL*Plus Kill Processes Without Query On Exit" + :type '(boolean)) + +(defcustom sqlplus-multi-output-tables-default-flag t + "Non-nil means render database table as set of adjacent tables so that they occupy all width of output window. +For screen space saving and user comfort." + :group 'sqlplus + :tag "SQL*Plus Multiple Tables In Output by Default" + :type '(boolean)) + +(defcustom sqlplus-source-buffer-readonly-by-default-flag t + "Non-nil means show database sources in read-only buffer." + :group 'sqlplus + :tag "SQL*Plus Source Buffer Read Only By Default" + :type '(boolean)) + +(defcustom sqlplus-command "sqlplus" + "SQL*Plus interpreter program." + :group 'sqlplus + :tag "SQL*Plus Command" + :type '(string)) + +(defcustom sqlplus-history-dir nil + "Directory of SQL*Plus command history (log) files, or nil (dont generate log files). +History file name has format '-history.txt'." + :group 'sqlplus + :tag "SQL*Plus History Dir" + :type '(choice directory (const nil))) + +(defvar sqlplus-session-file-extension "sqp") + +(defcustom sqlplus-session-cache-dir nil + "Directory of SQL*Plus input buffer files, or nil (dont save user session). +Session file name has format '.sqp'" + :group 'sqlplus + :tag "SQL*Plus History Dir" + :type '(choice directory (const nil))) + +(defcustom sqlplus-save-passwords nil + "Non-nil means save passwords between Emacs sessions. (Not implemented yet)." + :group 'sqlplus + :tag "SQL*Plus Save Passwords" + :type '(boolean)) + +(defcustom sqlplus-pagesize 200 + "Approximate number of records in query results. +If result has more rows, it will be cutted and terminated with '. . .' line." + :group 'sqlplus + :tag "SQL*Plus Max Rows Count" + :type '(integer)) + +(defvar sqlplus-default-wrap "on") + +(defcustom sqlplus-initial-strings + (list "set sqlnumber off" + "set tab off" + "set linesize 4000" + "set echo off" + "set newpage 1" + "set space 1" + "set feedback 6" + "set heading on" + "set trimspool off" + (format "set wrap %s" sqlplus-default-wrap) + "set timing on" + "set feedback on") + "Initial commands to send to interpreter. +Customizing this variable is dangerous." + :group 'sqlplus + :tag "SQL*Plus Initial Strings" + :type '(repeat string)) + +(defcustom sqlplus-table-col-separator " | " + "Database table column separator (text-only terminals)." + :group 'sqlplus + :tag "SQL*Plus Table Col Separator" + :type '(string)) + +(defcustom sqlplus-table-col-head-separator "-+-" + "Database table header-column separator (text-only terminals)." + :group 'sqlplus + :tag "SQL*Plus Table Col Separator" + :type '(string)) + +(defcustom sqlplus-html-output-file-name "$HOME/sqlplus_report.html" + "Output file for HTML result." + :group 'sqlplus + :tag "SQL*Plus HTML Output File Name" + :type '(file)) + +(defcustom sqlplus-html-output-encoding "iso-8859-1" + "Encoding for SQL*Plus HTML output." + :group 'sqlplus + :tag "SQL*Plus HTML Output Encoding" + :type '(string)) + +(defcustom sqlplus-html-output-sql t + "Non-nil means put SQL*Plus command in head of HTML result." + :group 'sqlplus + :tag "SQL*Plus HTML Output Encoding" + :type '(choice (const :tag "Elegant" 'elegant) + (const :tag "Simple" t) + (const :tag "No" nil))) + +(defcustom sqlplus-html-output-header (concat (current-time-string) "

") + "HTML header sexp (result must be string)." + :group 'sqlplus + :tag "SQL*Plus HTML Output Header" + :type '(sexp)) + +(defcustom sqlplus-command-highlighting-percentage 7 + "SQL*Plus command highlighting percentage (0-100), only if sqlplus-command-highlighting-style is set." + :group 'sqlplus + :tag "SQL*Plus command highlighting percentage" + :type '(integer)) + +(defcustom sqlplus-command-highlighting-style nil + "How to highlight current command in sqlplus buffer." + :group 'sqlplus + :tag "SQL*Plud command highlighting style" + :type '(choice (const :tag "Fringe" fringe) + (const :tag "Background" background) + (const :tag "Fringe and background" fringe-and-background) + (const :tag "None" nil))) + +(defvar sqlplus-elegant-style window-system) + +(defvar sqlplus-cs nil) + +(defun sqlplus-shine-color (color percent) + (when (equal color "unspecified-bg") + (setq color (if (< percent 0) "white" "black"))) + (apply 'format "#%02x%02x%02x" + (mapcar (lambda (value) + (min 65535 (max 0 (* (+ (/ value 650) percent) 650)))) + (color-values color)))) + +(defvar sqlplus-table-head-face 'sqlplus-table-head-face) +(defface sqlplus-table-head-face + (list + (list '((class mono)) + '(:inherit default :weight bold :inverse-video t)) + (list '((background light)) + (append (list :inherit 'default :background (sqlplus-shine-color (face-background 'default) -70) :foreground (face-background 'default)) + (when (and sqlplus-elegant-style (>= emacs-major-version 22)) '(:box (:style released-button))))) + (list '((background dark)) + (append (list :inherit 'default :background (sqlplus-shine-color (face-background 'default) +70) :foreground (face-background 'default)) + (when (and sqlplus-elegant-style (>= emacs-major-version 22)) '(:box (:style released-button))))) + '(t (:inherit default))) + "Face for table header" + :group 'sqlplus) + +(defvar sqlplus-table-even-rows-face 'sqlplus-table-even-rows-face) +(defface sqlplus-table-even-rows-face + (list + (list '((class mono)) '()) + (list '((type tty)) '()) + (list '((background light)) + (append (list :inherit 'default :background (sqlplus-shine-color (face-background 'default) -20) :overline (face-background 'default)))) + (list '((background dark)) + (append (list :inherit 'default :background (sqlplus-shine-color (face-background 'default) +20) :overline (face-background 'default)))) + '(t ())) + "Face for table even rows" + :group 'sqlplus) + +(defvar sqlplus-table-odd-rows-face 'sqlplus-table-odd-rows-face) +(defface sqlplus-table-odd-rows-face + (list + (list '((class mono)) '(:inherit default)) + (list '((background light)) + (append (list :inherit 'default :background (sqlplus-shine-color (face-background 'default) -30) :overline (face-background 'default)))) + (list '((background dark)) + (append (list :inherit 'default :background (sqlplus-shine-color (face-background 'default) +30) :overline (face-background 'default)))) + '(t (:inherit default))) + "Face for table even rows" + :group 'sqlplus) + +(defvar sqlplus-command-highlight-face 'sqlplus-command-highlight-face) +(defface sqlplus-command-highlight-face + (list + '(((class mono)) ()) + '(((type tty)) ()) + (list '((background light)) + (append (list :background (sqlplus-shine-color (face-background 'default) (- sqlplus-command-highlighting-percentage))))) + (list '((background dark)) + (append (list :background (sqlplus-shine-color (face-background 'default) sqlplus-command-highlighting-percentage)))) + '(t ())) + "Face for highlighting command under point" + :group 'sqlplus) + +(defvar sqlplus-plsql-compilation-results-buffer-name "*PL/SQL Compilation*") + +(defvar sqlplus-fan "|" + "Local in input buffers") +(make-variable-buffer-local 'sqlplus-fan) + +(defvar orcl-mode-map nil + "Keymap used in Orcl mode.") + +(define-minor-mode orcl-mode + "Mode for executing SQL*Plus commands and scrolling results. + +Mode Specific Bindings: + +\\{orcl-mode-map}" + nil ; init value + (" " (:eval sqlplus-fan) " " (:eval (connect-string-to-string))) ; mode indicator + orcl-mode-map ; keymap + ;; body + (setq sqlplus-fan "|") + (unless (assq 'orcl-mode minor-mode-map-alist) + (push (cons 'orcl-mode orcl-mode-map) minor-mode-map-alist))) + +(defvar sqlplus-user-variables (makehash 'equal)) + +(defvar sqlplus-user-variables-history nil) + +(defvar sqlplus-get-source-history nil) + +(defvar sqlplus-process-p nil + "Non-nil (connect string) if current buffer is SQL*Plus process buffer. +Local in process buffer.") +(make-variable-buffer-local 'sqlplus-process-p) + +(defvar sqlplus-command-seq 0 + "Sequence for command id within SQL*Plus connection. +Local in process buffer.") +(make-variable-buffer-local 'sqlplus-command-seq) + +;;; :id - unique command identifier (from sequence, for session) +;;; :sql - content of command +;;; :dont-parse-result - process data online as it comes from sqlplus, with sqlplus-result-online or with :result-function function +;;; :result-function - function for processing sqlplus data; must have signature (context connect-string begin end interrupted); +;;; if nil then it is sqlplus-result-online for :dont-parse-result set to non-nil and sqlplus-process-command-output for :dont-parse-result set to nil +;;; :current-command-input-buffer-name - buffer name from which command was initialized +(defvar sqlplus-command-contexts nil + "Command options list, for current and enqueued commands, in chronological order. +Local in process buffer.") +(make-variable-buffer-local 'sqlplus-command-contexts) + +(defvar sqlplus-connect-string nil + "Local variable with connect-string for current buffer (input buffers, output buffer).") +(make-variable-buffer-local 'sqlplus-connect-string) + +(defvar sqlplus-connect-strings-alist nil + "Connect strings in format (CS . PASSWD), where PASSWD can be nil.") + +(defvar sqlplus-connect-string-history nil) + +(defvar sqlplus-prompt-prefix "SQL[") +(defvar sqlplus-prompt-suffix "]# ") + +(defvar sqlplus-page-separator "@!%#!") + +(defvar sqlplus-repfooter "##%@!") + +(defvar sqlplus-mode-map nil + "Keymap used in SQL*Plus mode.") + +(defvar sqlplus-output-separator "@--" + "String printed between sets of SQL*Plus command output.") + +;;; Markers - + +(defvar sqlplus-buffer-mark (make-marker) + "Marks the current SQL command in the SQL*Plus output buffer. +Local in output buffer.") +(make-variable-buffer-local 'sqlplus-buffer-mark) + +(defvar sqlplus-region-beginning-pos nil + "Marks the beginning of the region to sent to the SQL*Plus process. +Local in input buffer with sqlplus-mode.") +(make-variable-buffer-local 'sqlplus-region-beginning-pos) + +(defvar sqlplus-region-end-pos nil + "Marks the end of the region to sent to the SQL*Plus process. +Local in input buffer with sqlplus-mode.") +(make-variable-buffer-local 'sqlplus-region-end-pos) + +(defvar sqlplus-connections-menu + '("SQL*Plus" + :filter sqlplus-connections-menu) + "Menu for database connections") + +(defconst sqlplus-kill-xpm "\ +/* XPM */ +static char * reload_page_xpm[] = { +\"24 24 100 2\", +\" c None\", +\". c #000000\", +\"+ c #2A5695\", +\"@ c #30609E\", +\"# c #3363A2\", +\"$ c #3969A6\", +\"% c #3D6BA6\", +\"& c #3C68A3\", +\"* c #35619C\", +\"= c #244F8D\", +\"- c #3364A3\", +\"; c #3162A1\", +\"> c #3867A4\", +\", c #3F6DA8\", +\"' c #4672AC\", +\") c #4B76AE\", +\"! c #4E78AF\", +\"~ c #537CB1\", +\"{ c #547DB0\", +\"] c #446BA1\", +\"^ c #2E5D9C\", +\"/ c #234F8C\", +\"( c #214C89\", +\"_ c #244E8C\", +\": c #3A649D\", +\"< c #517BB0\", +\"[ c #517BB1\", +\"} c #4874AD\", +\"| c #6086B7\", +\"1 c #5F84B4\", +\"2 c #4B71A6\", +\"3 c #7B9BC4\", +\"4 c #224C89\", +\"5 c #3865A2\", +\"6 c #406FAB\", +\"7 c #436BA3\", +\"8 c #648ABA\", +\"9 c #4D78AF\", +\"0 c #4B77AE\", +\"a c #6E91BE\", +\"b c #809EC6\", +\"c c #204A87\", +\"d c #4974AF\", +\"e c #2B5590\", +\"f c #6487B5\", +\"g c #678CBB\", +\"h c #3465A4\", +\"i c #84A1C8\", +\"j c #6D8FBA\", +\"k c #4F7AB0\", +\"l c #8BA7CB\", +\"m c #7E9DC5\", +\"n c #83A1C7\", +\"o c #91ACCE\", +\"p c #89A4C9\", +\"q c #8FA9CB\", +\"r c #85A2C7\", +\"s c #90ABCC\", +\"t c #3E6CA8\", +\"u c #87A3C8\", +\"v c #4B6DA1\", +\"w c #91ABCD\", +\"x c #3768A5\", +\"y c #8AA5C9\", +\"z c #2D5690\", +\"A c #204A86\", +\"B c #93ADCE\", +\"C c #7294BF\", +\"D c #6288B9\", +\"E c #86A3C8\", +\"F c #466EA3\", +\"G c #3864A1\", +\"H c #285390\", +\"I c #234E8C\", +\"J c #95AECF\", +\"K c #7493BC\", +\"L c #86A2C7\", +\"M c #7999C3\", +\"N c #5B82B5\", +\"O c #6C8EBB\", +\"P c #4B71A5\", +\"Q c #26508B\", +\"R c #2B5792\", +\"S c #305E9B\", +\"T c #31619F\", +\"U c #7895BD\", +\"V c #819DC3\", +\"W c #688DBB\", +\"X c #6288B8\", +\"Y c #5880B4\", +\"Z c #577FB3\", +\"` c #547DB2\", +\" . c #416FAA\", +\".. c #3564A2\", +\"+. c #577AAB\", +\"@. c #6286B6\", +\"#. c #668BBA\", +\"$. c #507AB0\", +\"%. c #426EA8\", +\"&. c #2F5B97\", +\" \", +\" \", +\" \", +\" . . . . . . . . \", +\" . . + @ # $ % & * . . . . \", +\" . = - ; @ > , ' ) ! ~ { . . . ] . \", +\" . ^ / ( _ . . . : < [ } | 1 2 3 . \", +\" . _ 4 5 6 . . . 7 8 9 0 a b . \", +\" . c d . . . e f g h i . \", +\" . . . . . j k h l . \", +\" . . f m n l o . \", +\" . . . . . . . . \", +\" . . . . . . . . \", +\" . p q q q r . . \", +\" . s , t u v . . . . \", +\" . w x | y z . . . . A . \", +\" . B C 9 D E F . . . G H I . \", +\" . J K L M N C O P . . . Q R S T . \", +\" . U . . . V W X | Y Z ` ) .... \", +\" . . . . +.@.#.N $.%.&.. . \", +\" . . . . . . . . \", +\" \", +\" \", +\" \"}; +" + "XPM format image used as Kill icon") + +(defconst sqlplus-cancel-xpm "\ +/* XPM */ +static char * process_stop_xpm[] = { +\"24 24 197 2\", +\" c None\", +\". c #000000\", +\"+ c #C92B1E\", +\"@ c #DA432F\", +\"# c #E95941\", +\"$ c #F26B50\", +\"% c #ED6047\", +\"& c #DF4A35\", +\"* c #CE3324\", +\"= c #BF1D13\", +\"- c #EA5942\", +\"; c #EF563A\", +\"> c #F14D2C\", +\", c #F1431F\", +\"' c #F23A12\", +\") c #F2421C\", +\"! c #F24D2A\", +\"~ c #F15737\", +\"{ c #F0644A\", +\"] c #CF3121\", +\"^ c #D83828\", +\"/ c #ED5840\", +\"( c #EC3B1C\", +\"_ c #EE310B\", +\": c #F1350C\", +\"< c #F4380D\", +\"[ c #F53A0D\", +\"} c #F53B0D\", +\"| c #F4390D\", +\"1 c #F2360C\", +\"2 c #EF3A15\", +\"3 c #F05A3D\", +\"4 c #E44D37\", +\"5 c #CD2B1E\", +\"6 c #EA4D35\", +\"7 c #E92D0C\", +\"8 c #ED2F0B\", +\"9 c #F0330C\", +\"0 c #F3380D\", +\"a c #F63C0E\", +\"b c #F93F0F\", +\"c c #F9400F\", +\"d c #F73D0E\", +\"e c #F1340C\", +\"f c #EE300B\", +\"g c #EC482C\", +\"h c #E04532\", +\"i c #E84E3A\", +\"j c #E62A0E\", +\"k c #EA2B0A\", +\"l c #F83F0E\", +\"m c #FC4310\", +\"n c #FC4410\", +\"o c #F63B0E\", +\"p c #EB2C0A\", +\"q c #EB5139\", +\"r c #C8251A\", +\"s c #DD3D2E\", +\"t c #E5341D\", +\"u c #E62508\", +\"v c #F9BEB2\", +\"w c #FBCFC5\", +\"x c #F54C23\", +\"y c #F95125\", +\"z c #FDD4CB\", +\"A c #FABFB2\", +\"B c #E83013\", +\"C c #E84F3B\", +\"D c #E54737\", +\"E c #E22007\", +\"F c #E92A09\", +\"G c #FBD2CA\", +\"H c #FFFFFF\", +\"I c #FDDFD9\", +\"J c #F64E24\", +\"K c #FDE0D9\", +\"L c #E72609\", +\"M c #E7452F\", +\"N c #E33D2D\", +\"O c #E11E07\", +\"P c #E52308\", +\"Q c #E82809\", +\"R c #EC3F21\", +\"S c #FCDED8\", +\"T c #F55C37\", +\"U c #FCDFD8\", +\"V c #F04521\", +\"W c #EC2E0A\", +\"X c #E92909\", +\"Y c #E62408\", +\"Z c #E53823\", +\"` c #CE2B1F\", +\" . c #C62018\", +\".. c #E03120\", +\"+. c #E01C06\", +\"@. c #E32107\", +\"#. c #ED4121\", +\"$. c #FEF9F8\", +\"%. c #E72709\", +\"&. c #E42208\", +\"*. c #E32D17\", +\"=. c #D83729\", +\"-. c #CB231B\", +\";. c #DE2A1B\", +\">. c #DE1A06\", +\",. c #EE5135\", +\"'. c #EF5335\", +\"). c #EC2D0A\", +\"!. c #E82709\", +\"~. c #E21F07\", +\"{. c #E02511\", +\"]. c #DC392C\", +\"^. c #BE1612\", +\"/. c #DD2E21\", +\"(. c #DC1705\", +\"_. c #DF1B06\", +\":. c #E42308\", +\"<. c #E93A20\", +\"[. c #FBDDD8\", +\"}. c #EB3D20\", +\"|. c #DF2A18\", +\"1. c #D02A1F\", +\"2. c #DC3328\", +\"3. c #DA1404\", +\"4. c #DD1805\", +\"5. c #E3331E\", +\"6. c #FADCD8\", +\"7. c #FBDCD8\", +\"8. c #EB4C34\", +\"9. c #E6361F\", +\"0. c #DD1905\", +\"a. c #DF2F21\", +\"b. c #C21A14\", +\"c. c #DA3128\", +\"d. c #D81408\", +\"e. c #F7C9C4\", +\"f. c #FADBD8\", +\"g. c #E5341E\", +\"h. c #E5351E\", +\"i. c #F8CEC9\", +\"j. c #DB1505\", +\"k. c #DD3429\", +\"l. c #C31613\", +\"m. c #D9281F\", +\"n. c #D71003\", +\"o. c #D91304\", +\"p. c #F3B5B0\", +\"q. c #F7CDC9\", +\"r. c #E12F1D\", +\"s. c #DF1C06\", +\"t. c #E2301D\", +\"u. c #F4B6B0\", +\"v. c #DC1605\", +\"w. c #DB2317\", +\"x. c #D2271F\", +\"y. c #D1231D\", +\"z. c #D61A10\", +\"A. c #D60F03\", +\"B. c #D81104\", +\"C. c #DB1605\", +\"D. c #D81204\", +\"E. c #D81509\", +\"F. c #DA2F26\", +\"G. c #D52620\", +\"H. c #D51A12\", +\"I. c #D50D03\", +\"J. c #D60E03\", +\"K. c #D6170D\", +\"L. c #D92B23\", +\"M. c #BD100D\", +\"N. c #AB0404\", +\"O. c #CE1D19\", +\"P. c #D6231C\", +\"Q. c #D41008\", +\"R. c #D40B02\", +\"S. c #D40C02\", +\"T. c #D50C03\", +\"U. c #D40E05\", +\"V. c #D62018\", +\"W. c #D4251F\", +\"X. c #B30A09\", +\"Y. c #A20000\", +\"Z. c #BC0F0E\", +\"`. c #D2211E\", +\" + c #D52520\", +\".+ c #D5201A\", +\"++ c #D41A14\", +\"@+ c #D51F19\", +\"#+ c #D62620\", +\"$+ c #D52420\", +\"%+ c #C51614\", +\"&+ c #A30101\", +\"*+ c #A30303\", +\"=+ c #AE0909\", +\"-+ c #BD0E0E\", +\";+ c #B30B0B\", +\">+ c #A30404\", +\" \", +\" . . . . . . . \", +\" . . + @ # $ % & * . . \", +\" . = - ; > , ' ) ! ~ { ] . \", +\" . ^ / ( _ : < [ } | 1 2 3 4 . \", +\" . 5 6 7 8 9 0 a b c d | e f g h . \", +\" . i j k f : [ l m n c o 1 _ p q r . \", +\" . s t u k v w x l m n y z A _ p B C . \", +\" . D E u F G H I J b y K H w f k L M . \", +\" . N O P Q R S H I T K H U V W X Y Z ` . \", +\" . ...+.@.u F #.S H $.H U V 8 k %.&.*.=.. \", +\" . -.;.>.O &.L F ,.$.H $.'.).k !.P ~.{.].. \", +\" . ^./.(._.~.:.<.[.H $.H [.}.L P E +.|.1.. \", +\" . 2.3.4._.5.6.H 7.8.7.H 6.9.~.+.0.a.b.. \", +\" . c.d.3.(.e.H f.g.@.h.6.H i._.4.j.k.. \", +\" . l.m.n.o.p.q.r._.s.s.t.e.u.v.3.w.x.. \", +\" . y.z.A.B.o.j.C.(.(.v.j.3.D.E.F.. \", +\" . G.H.I.J.n.B.B.B.B.n.A.K.L.M.. \", +\" . N.O.P.Q.R.S.T.T.S.U.V.W.X.. \", +\" . Y.Z.`. +.+++@+#+$+%+&+. \", +\" . . . *+=+-+;+>+Y.. . \", +\" . . . . . . \", +\" \", +\" \"}; +" + "XPM format image used as Cancel icon") + +(defconst sqlplus-rollback-xpm "\ +/* XPM */ +static char * rollback_xpm[] = { +\"24 24 228 2\", +\" c None\", +\". c #000000\", +\"+ c #F8F080\", +\"@ c #FEF57B\", +\"# c #FFF571\", +\"$ c #FFF164\", +\"% c #FFED58\", +\"& c #FFE748\", +\"* c #FEDE39\", +\"= c #F8F897\", +\"- c #FFFE96\", +\"; c #FFFA8A\", +\"> c #FFF67C\", +\", c #FFF16E\", +\"' c #FFEC62\", +\") c #FFE956\", +\"! c #FFE448\", +\"~ c #FFE03C\", +\"{ c #FFDD30\", +\"] c #FED821\", +\"^ c #F1CB15\", +\"/ c #FFFC92\", +\"( c #FFFC91\", +\"_ c #FFFC90\", +\": c #FFFB8D\", +\"< c #FFF67D\", +\"[ c #FFEB5E\", +\"} c #FFEA5B\", +\"| c #FFE958\", +\"1 c #FFE855\", +\"2 c #FFE752\", +\"3 c #FDD41C\", +\"4 c #FDD319\", +\"5 c #FDD416\", +\"6 c #FFFF9D\", +\"7 c #FFFF99\", +\"8 c #FFFD94\", +\"9 c #FFFA89\", +\"0 c #FFDC2F\", +\"a c #FED315\", +\"b c #FFD808\", +\"c c #FFFC9F\", +\"d c #FFFE99\", +\"e c #FFDF3B\", +\"f c #F7C909\", +\"g c #F8EA86\", +\"h c #FEFCB7\", +\"i c #FFFDA6\", +\"j c #FFFA91\", +\"k c #FFF681\", +\"l c #FFF171\", +\"m c #FFED64\", +\"n c #FFE44A\", +\"o c #FFE03D\", +\"p c #FEDB2F\", +\"q c #F9D21E\", +\"r c #E9BC0F\", +\"s c #CE9C02\", +\"t c #F3E36A\", +\"u c #FCF899\", +\"v c #FFFCA3\", +\"w c #FEF694\", +\"x c #FFF284\", +\"y c #FFEE71\", +\"z c #FFEA62\", +\"A c #FDDC40\", +\"B c #F8D22F\", +\"C c #F1C61B\", +\"D c #DDAD0A\", +\"E c #CC9A02\", +\"F c #C89500\", +\"G c #F4EA77\", +\"H c #F7EF7F\", +\"I c #FFF16A\", +\"J c #FFEF68\", +\"K c #FFEE66\", +\"L c #FED622\", +\"M c #FED51E\", +\"N c #FED419\", +\"O c #E9B90E\", +\"P c #E7B509\", +\"Q c #D4A202\", +\"R c #CA9700\", +\"S c #F6E67C\", +\"T c #F3E67F\", +\"U c #FCEE7A\", +\"V c #FDEB66\", +\"W c #FEE44E\", +\"X c #FED313\", +\"Y c #FDCA03\", +\"Z c #F2BE01\", +\"` c #D4A60D\", +\" . c #D4A206\", +\".. c #D19C00\", +\"+. c #CF9800\", +\"@. c #E3AF02\", +\"#. c #F9EB81\", +\"$. c #FBF096\", +\"%. c #F9E67C\", +\"&. c #F8DC5F\", +\"*. c #F8D548\", +\"=. c #F9D02D\", +\"-. c #F9C915\", +\";. c #F7C104\", +\">. c #EEB606\", +\",. c #E9B704\", +\"'. c #DEAE08\", +\"). c #414D7B\", +\"!. c #3C5CA2\", +\"~. c #3A65B3\", +\"{. c #3668BB\", +\"]. c #325EAF\", +\"^. c #F3E46E\", +\"/. c #FCFA9B\", +\"(. c #FFF89C\", +\"_. c #FDEC81\", +\":. c #FCE668\", +\"<. c #FDDF4E\", +\"[. c #FCDA3C\", +\"}. c #FCD52E\", +\"|. c #FAD026\", +\"1. c #4662A2\", +\"2. c #465A8D\", +\"3. c #3F6CBA\", +\"4. c #3A68B7\", +\"5. c #2E529E\", +\"6. c #2655AC\", +\"7. c #F0DC69\", +\"8. c #FBF78C\", +\"9. c #FFF880\", +\"0. c #FFF06B\", +\"a. c #FFE03E\", +\"b. c #FFD828\", +\"c. c #FED015\", +\"d. c #F5C40A\", +\"e. c #4B70B4\", +\"f. c #4870B7\", +\"g. c #3C5CA1\", +\"h. c #4070BF\", +\"i. c #3759A0\", +\"j. c #1D469C\", +\"k. c #214493\", +\"l. c #F2DD6C\", +\"m. c #F8EB7E\", +\"n. c #FBEE7A\", +\"o. c #FBE461\", +\"p. c #FADB48\", +\"q. c #FBD631\", +\"r. c #FED10F\", +\"s. c #FECD07\", +\"t. c #F1BD00\", +\"u. c #456AAE\", +\"v. c #4C7ECA\", +\"w. c #487AC8\", +\"x. c #35528F\", +\"y. c #1B4294\", +\"z. c #1B4193\", +\"A. c #F9EA83\", +\"B. c #FCF08E\", +\"C. c #F6E16E\", +\"D. c #F4D559\", +\"E. c #F5CF45\", +\"F. c #F6CB2E\", +\"G. c #F8C611\", +\"H. c #F6C005\", +\"I. c #E8B300\", +\"J. c #4268AE\", +\"K. c #4375C4\", +\"L. c #3F71C1\", +\"M. c #33569B\", +\"N. c #173F94\", +\"O. c #183A8B\", +\"P. c #F3E36E\", +\"Q. c #FCF7A1\", +\"R. c #FEF9A1\", +\"S. c #FEEE7D\", +\"T. c #FCE360\", +\"U. c #FAD946\", +\"V. c #F9D132\", +\"W. c #F8CD26\", +\"X. c #F7CA20\", +\"Y. c #3B589A\", +\"Z. c #395FA9\", +\"`. c #3359A5\", +\" + c #3056A3\", +\".+ c #2B468D\", +\"++ c #0A3897\", +\"@+ c #E6D465\", +\"#+ c #FDFA90\", +\"$+ c #FFF885\", +\"%+ c #FFF074\", +\"&+ c #FFEA60\", +\"*+ c #FFE246\", +\"=+ c #FFDC31\", +\"-+ c #FED51F\", +\";+ c #F7CB14\", +\">+ c #173788\", +\",+ c #063494\", +\"'+ c #E8DE7B\", +\")+ c #FFFA86\", +\"!+ c #FFF26A\", +\"~+ c #FFE84F\", +\"{+ c #FFD415\", +\"]+ c #FDCC04\", +\"^+ c #F3C001\", +\"/+ c #EBB600\", +\"(+ c #E3AF01\", +\"_+ c #D7A100\", +\":+ c #2D3E7F\", +\"<+ c #033396\", +\"[+ c #CFB954\", +\"}+ c #DBC347\", +\"|+ c #DEBF2C\", +\"1+ c #DFB718\", +\"2+ c #DFB206\", +\"3+ c #D6A505\", +\"4+ c #C6970A\", +\"5+ c #B48413\", +\"6+ c #374682\", +\"7+ c #023398\", +\"8+ c #0E3287\", +\"9+ c #253775\", +\"0+ c #05318F\", +\"a+ c #10358B\", +\"b+ c #183888\", +\"c+ c #053495\", +\"d+ c #0E348D\", +\"e+ c #183585\", +\" . . . . . . . \", +\" . . + @ # $ % & * . . . \", +\" . = - ; > , ' ) ! ~ { ] ^ . \", +\". / ( _ : ; < [ } | 1 2 3 4 5 . \", +\". 6 7 8 9 > , ' ) ! ~ 0 ] a b . \", +\". c d 8 9 > , ' ) ! e 0 ] a f . \", +\". g h i j k l m | n o p q r s . \", +\". t u v w x y z 2 A B C D E F . \", +\". G H I J K L M N O P Q R F F . \", +\". S T U V W p X Y Z ` ...+.@.. . . . . \", +\". #.$.%.&.*.=.-.;.>.. . ,.'.. ).!.~.{.].. \", +\". ^./.(._.:.<.[.}.|.. 1.. . 2.3.4.. . 5.6.. \", +\". 7.8.9.0.) a.b.c.d.. e.f.g.h.i.. . j.k.. \", +\". l.m.n.o.p.q.r.s.t.. u.v.w.x.. . y.z.. \", +\". A.B.C.D.E.F.G.H.I.. J.K.L.M.. . N.O.. \", +\". P.Q.R.S.T.U.V.W.X.. Y.Z.`. +.+. . ++. \", +\". @+#+$+%+&+*+=+-+;+. . . . . . . . >+,+. \", +\" . '+)+!+~+{ {+]+^+/+(+_+. . :+<+. \", +\" . . [+}+|+1+2+3+4+5+. . 6+7+8+. \", +\" . . . . . . . . . 9+0+a+. \", +\" . b+c+d+. \", +\" . e+. . \", +\" . \", +\" \"}; +" + "XPM format image used as Rollback icon") + +(defconst sqlplus-commit-xpm "\ +/* XPM */ +static char * commit_xpm[] = { +\"24 24 276 2\", +\" c None\", +\". c #000000\", +\"+ c #FDF57D\", +\"@ c #FFF676\", +\"# c #FFF36C\", +\"$ c #FFF05D\", +\"% c #FFEB51\", +\"& c #FFE445\", +\"* c #FDDC35\", +\"= c #EFEA85\", +\"- c #FBF68D\", +\"; c #FCF482\", +\"> c #FCF178\", +\", c #FCEE6E\", +\"' c #FCEB66\", +\") c #FCE85B\", +\"! c #FCE551\", +\"~ c #FDE147\", +\"{ c #FDDF3D\", +\"] c #FEDD2D\", +\"^ c #FCD621\", +\"/ c #E5BF16\", +\"( c #D8D479\", +\"_ c #FCF587\", +\": c #FAEF78\", +\"< c #FAEA6B\", +\"[ c #FAEA6A\", +\"} c #FAE968\", +\"| c #FAE967\", +\"1 c #FAE865\", +\"2 c #FAE864\", +\"3 c #FDDD3C\", +\"4 c #FED621\", +\"5 c #FFD51D\", +\"6 c #FFD51B\", +\"7 c #FFD519\", +\"8 c #D8B82B\", +\"9 c #FCF790\", +\"0 c #FBF587\", +\"a c #F8EF7D\", +\"b c #F8EC75\", +\"c c #F7E86B\", +\"d c #F8E868\", +\"e c #F9E663\", +\"f c #F9E45A\", +\"g c #F9E253\", +\"h c #F9E04C\", +\"i c #FBDD40\", +\"j c #FBDB38\", +\"k c #FAD933\", +\"l c #FAD529\", +\"m c #FDD810\", +\"n c #FFFD9E\", +\"o c #FFFF9A\", +\"p c #FFFE96\", +\"q c #FFFB8C\", +\"r c #FFF781\", +\"s c #FFF375\", +\"t c #FFEF69\", +\"u c #FFEA5B\", +\"v c #FFE750\", +\"w c #FFE345\", +\"x c #FFDF38\", +\"y c #FFDB2B\", +\"z c #FFD81F\", +\"A c #FFD313\", +\"B c #FBD007\", +\"C c #FBF090\", +\"D c #FFFDAE\", +\"E c #FFFEA2\", +\"F c #FFFA8C\", +\"G c #FFF780\", +\"H c #F6CA11\", +\"I c #E1AF03\", +\"J c #F4E36D\", +\"K c #FCF7A4\", +\"L c #FFFEBB\", +\"M c #FEFAA6\", +\"N c #FFF990\", +\"O c #FFF57E\", +\"P c #FFEE6F\", +\"Q c #FFEB61\", +\"R c #FFE856\", +\"S c #FFE34A\", +\"T c #FBDD44\", +\"U c #F7D535\", +\"V c #EBBF13\", +\"W c #D5A406\", +\"X c #C99500\", +\"Y c #F0DC5F\", +\"Z c #F3E772\", +\"` c #F7EC76\", +\" . c #F6E56D\", +\".. c #F6E369\", +\"+. c #F6E264\", +\"@. c #F5DF5C\", +\"#. c #F3DB53\", +\"$. c #F3D849\", +\"%. c #EFD245\", +\"&. c #ECCE3F\", +\"*. c #E3B91F\", +\"=. c #D3A40B\", +\"-. c #C99600\", +\";. c #C69200\", +\">. c #EED95E\", +\",. c #EDDA60\", +\"'. c #F1DF64\", +\"). c #F2DF5E\", +\"!. c #F2DD57\", +\"~. c #F2D94E\", +\"{. c #F2D644\", +\"]. c #EFD038\", +\"^. c #ECCB34\", +\"/. c #E6C430\", +\"(. c #DFB71F\", +\"_. c #D9AD17\", +\":. c #CC9907\", +\"<. c #C69000\", +\"[. c #D39E00\", +\"}. c #BB1503\", +\"|. c #F9EA7D\", +\"1. c #F6E57A\", +\"2. c #F5E370\", +\"3. c #F5DE62\", +\"4. c #F9DF52\", +\"5. c #FBDB3E\", +\"6. c #FCD526\", +\"7. c #FCCE0F\", +\"8. c #F7C50A\", +\"9. c #EEBA08\", +\"0. c #E2AB03\", +\"a. c #D7A000\", +\"b. c #D59D00\", +\"c. c #DFA901\", +\"d. c #E7B402\", +\"e. c #C91800\", +\"f. c #F6E676\", +\"g. c #FCF4A1\", +\"h. c #FDF096\", +\"i. c #FAE167\", +\"j. c #F7D64F\", +\"k. c #F7CF38\", +\"l. c #F7CB26\", +\"m. c #F6BF0C\", +\"n. c #F1B905\", +\"o. c #ECB309\", +\"p. c #EBB60A\", +\"q. c #F0BF0B\", +\"r. c #F3C206\", +\"s. c #E5B201\", +\"t. c #CF9C01\", +\"u. c #C21602\", +\"v. c #C21703\", +\"w. c #F2E067\", +\"x. c #FBF78F\", +\"y. c #FEF28A\", +\"z. c #FEED74\", +\"A. c #FFE85F\", +\"B. c #FFE24D\", +\"C. c #FFDE3A\", +\"D. c #FED92F\", +\"E. c #FCD325\", +\"F. c #F8CD1A\", +\"G. c #EDBD0A\", +\"H. c #D9A701\", +\"I. c #C79200\", +\"J. c #D11D00\", +\"K. c #EFDA64\", +\"L. c #F7EF7F\", +\"M. c #FCF47F\", +\"N. c #FDEE6C\", +\"O. c #FDE85B\", +\"P. c #FDE249\", +\"Q. c #FDDC36\", +\"R. c #FCD423\", +\"S. c #F9CC14\", +\"T. c #F0C10E\", +\"U. c #E6B507\", +\"V. c #DCA900\", +\"W. c #D29F00\", +\"X. c #C69400\", +\"Y. c #C99200\", +\"Z. c #CC1B02\", +\"`. c #C61A04\", +\" + c #E1CF5F\", +\".+ c #EAD862\", +\"++ c #ECDB63\", +\"@+ c #EFDC5E\", +\"#+ c #EFD955\", +\"$+ c #EFD74D\", +\"%+ c #EFD444\", +\"&+ c #F0D23E\", +\"*+ c #EECE37\", +\"=+ c #E8C731\", +\"-+ c #E0B922\", +\";+ c #D09E03\", +\">+ c #CB9700\", +\",+ c #C39100\", +\"'+ c #C99400\", +\")+ c #E12400\", +\"!+ c #F2E47C\", +\"~+ c #F8ED8C\", +\"{+ c #F4E171\", +\"]+ c #F0D65B\", +\"^+ c #F0D24F\", +\"/+ c #F1CF43\", +\"(+ c #F2CD34\", +\"_+ c #F2C824\", +\":+ c #EEC527\", +\"<+ c #E7BD23\", +\"[+ c #DFAC12\", +\"}+ c #DAA203\", +\"|+ c #E5B202\", +\"1+ c #EDBA01\", +\"2+ c #D69F00\", +\"3+ c #D21E01\", +\"4+ c #D01C00\", +\"5+ c #F2E16A\", +\"6+ c #FBF59D\", +\"7+ c #FEFBAA\", +\"8+ c #FEF084\", +\"9+ c #FCE567\", +\"0+ c #FBDD50\", +\"a+ c #F8D23B\", +\"b+ c #F8CD28\", +\"c+ c #EEB51C\", +\"d+ c #DA8A13\", +\"e+ c #E29A16\", +\"f+ c #EDB111\", +\"g+ c #E5AE08\", +\"h+ c #D19C01\", +\"i+ c #C79400\", +\"j+ c #BF1603\", +\"k+ c #DD2300\", +\"l+ c #E6D261\", +\"m+ c #FCF88C\", +\"n+ c #FFF27A\", +\"o+ c #FFEC6A\", +\"p+ c #FFE655\", +\"q+ c #FFE041\", +\"r+ c #FFDA2B\", +\"s+ c #E49D14\", +\"t+ c #BA4F02\", +\"u+ c #BB6A00\", +\"v+ c #B37102\", +\"w+ c #DD2200\", +\"x+ c #CA1B02\", +\"y+ c #E6DB78\", +\"z+ c #FEFB8B\", +\"A+ c #FFF470\", +\"B+ c #FFEA56\", +\"C+ c #FFE13E\", +\"D+ c #FFDA24\", +\"E+ c #FECF0A\", +\"F+ c #F5BE01\", +\"G+ c #D37800\", +\"H+ c #D72000\", +\"I+ c #C61802\", +\"J+ c #EBD55C\", +\"K+ c #FCE353\", +\"L+ c #FFE33E\", +\"M+ c #FFDB26\", +\"N+ c #FFD20B\", +\"O+ c #FCCB01\", +\"P+ c #F0B900\", +\"Q+ c #D47D00\", +\"R+ c #E42500\", +\"S+ c #EB2900\", +\"T+ c #DF2301\", +\"U+ c #E82700\", +\"V+ c #D31F04\", +\"W+ c #C71F01\", +\"X+ c #EA2800\", +\"Y+ c #E92800\", +\"Z+ c #DD2301\", +\"`+ c #E22501\", +\" . . . . . . . \", +\" . . . + @ # $ % & * . . . \", +\" . = - ; > , ' ) ! ~ { ] ^ / . \", +\". ( _ : < [ } | 1 2 3 4 5 6 7 8 . \", +\". 9 0 a b c d e f g h i j k l m . \", +\". n o p q r s t u v w x y z A B . \", +\". C D E F G s t u v w x y z H I . \", +\". J K L M N O P Q R S T U V W X . \", +\". Y Z ` ...+.@.#.$.%.&.*.=.-.;.. . . \", +\". >.,.'.).!.~.{.].^./.(._.:.<.[.. . }.. \", +\". |.1.2.3.4.5.6.7.8.9.0.a.b.c.d.. . e.. \", +\". f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.. . u.v.. \", +\". w.x.n y.z.A.B.C.D.E.F.G.H.-.I.. . J.. \", +\". K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.. . Z.`.. \", +\". +.+++@+#+$+%+&+*+=+-+;+>+,+'+. . )+. \", +\". !+~+{+]+^+/+(+_+:+<+[+}+|+1+2+. . 3+4+. \", +\". 5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+. j+k+. \", +\". l+m+q n+o+p+q+r+s+. . . t+u+v+. w+x+. \", +\" . y+z+A+B+C+D+E+F+G+. H+. . . I+)+. \", +\" . . J+K+L+M+N+O+P+Q+. R+S+T+U+V+. \", +\" . . . . . . . . . . W+X+Y+. \", +\" . Z+`+. \", +\" . . \", +\" . \"}; +" + "XPM format image used as Commit icon") + +(defconst plsql-prev-mark-xpm "\ +/* XPM */ +static char * go_previous_xpm[] = { +\"24 24 59 1\", +\" c None\", +\". c #000000\", +\"+ c #355D96\", +\"@ c #3C639B\", +\"# c #6E92BF\", +\"$ c #41679D\", +\"% c #6990BE\", +\"& c #6D94C2\", +\"* c #456DA2\", +\"= c #628BBC\", +\"- c #4D7BB4\", +\"; c #6991C0\", +\"> c #4971A6\", +\", c #5D87BA\", +\"' c #4B7BB3\", +\") c #4979B3\", +\"! c #5884B9\", +\"~ c #638CBC\", +\"{ c #638BBC\", +\"] c #6089BA\", +\"^ c #4B73A9\", +\"/ c #5883B8\", +\"( c #4A7AB3\", +\"_ c #618ABB\", +\": c #4C74AB\", +\"< c #547FB5\", +\"[ c #4972A9\", +\"} c #4D79B1\", +\"| c #4171AD\", +\"1 c #4071AD\", +\"2 c #4070AD\", +\"3 c #4171AC\", +\"4 c #4071AC\", +\"5 c #4070AC\", +\"6 c #3F70AC\", +\"7 c #3F70AB\", +\"8 c #406FAC\", +\"9 c #5781B5\", +\"0 c #4A74AC\", +\"a c #3E6CA8\", +\"b c #3465A4\", +\"c c #4E78AF\", +\"d c #446FA8\", +\"e c #4A75AD\", +\"f c #3F6CA6\", +\"g c #3C6BA7\", +\"h c #3B6BA7\", +\"i c #4471AB\", +\"j c #4572AB\", +\"k c #4672AC\", +\"l c #4571AB\", +\"m c #3A68A3\", +\"n c #3B6AA7\", +\"o c #406EA9\", +\"p c #3564A0\", +\"q c #3868A6\", +\"r c #305E9D\", +\"s c #3767A5\", +\"t c #2E5D9B\", +\" \", +\" \", +\" \", +\" .. \", +\" .+. \", +\" .@#. \", +\" .$%&. \", +\" .*=-;......... \", +\" .>,')!~{{{{{~]. \", +\" .^/()))(((((('_. \", +\" .:<)))))))))))),. \", +\" .[}|1123455567589. \", +\" .0abbbbbbbbbbbbc. \", +\" .dabbbbbbbbbbbe. \", +\" .fgbbhijjjjjkl. \", +\" .mnbo......... \", +\" .pqh. \", +\" .rs. \", +\" .t. \", +\" .. \", +\" . \", +\" \", +\" \", +\" \"}; +" + "XPM format image used as Previous Mark icon") + +(defconst plsql-next-mark-xpm "\ +/* XPM */ +static char * go_next_xpm[] = { +\"24 24 63 1\", +\" c None\", +\". c #000000\", +\"+ c #365F97\", +\"@ c #6B8FBE\", +\"# c #41689E\", +\"$ c #6990BF\", +\"% c #466EA4\", +\"& c #678EBD\", +\"* c #4E7DB5\", +\"= c #638CBC\", +\"- c #4B72A7\", +\"; c #5B83B5\", +\"> c #628BBB\", +\", c #5A86BA\", +\"' c #4979B3\", +\") c #4B7AB3\", +\"! c #5E87B9\", +\"~ c #4E76AA\", +\"{ c #5B84B8\", +\"] c #4E7CB5\", +\"^ c #4A7AB3\", +\"/ c #5883B7\", +\"( c #5178AD\", +\"_ c #5982B6\", +\": c #4C7BB4\", +\"< c #537FB5\", +\"[ c #5079AE\", +\"} c #507BB0\", +\"| c #4272AD\", +\"1 c #4070AC\", +\"2 c #3F70AB\", +\"3 c #3F70AC\", +\"4 c #4071AC\", +\"5 c #4171AC\", +\"6 c #4070AD\", +\"7 c #4071AD\", +\"8 c #4171AD\", +\"9 c #4D79B1\", +\"0 c #4E76AD\", +\"a c #4872AA\", +\"b c #3767A5\", +\"c c #3465A4\", +\"d c #3D6CA8\", +\"e c #4C76AD\", +\"f c #2B548E\", +\"g c #446FA8\", +\"h c #3C6BA7\", +\"i c #4772AA\", +\"j c #29528E\", +\"k c #3F6CA6\", +\"l c #4471AB\", +\"m c #4371AB\", +\"n c #3B6BA7\", +\"o c #416EA8\", +\"p c #3F6CA7\", +\"q c #3A69A6\", +\"r c #3C6AA5\", +\"s c #3B6AA5\", +\"t c #3868A6\", +\"u c #3765A2\", +\"v c #3666A3\", +\"w c #32619F\", +\"x c #2F5D9B\", +\" \", +\" \", +\" \", +\" .. \", +\" .+. \", +\" .@#. \", +\" .$$%. \", +\" .........&*=-. \", +\" .;>>>>>>=,')!~. \", +\" .{]^^^^^^''''/(. \", +\" ._:'''''''''''<[. \", +\" .}|12311145677890. \", +\" .abcccccccccccde. \", +\" .gbcccccccccchi. \", +\" .klmlllllhccno. \", +\" .........pcqr. \", +\" .stu. \", +\" .vw. \", +\" .x. \", +\" .. \", +\" . \", +\" \", +\" \", +\" \"}; +" + "XPM format image used as Next Mark icon") + +(defconst sqlplus-kill-image + (create-image sqlplus-kill-xpm 'xpm t)) + +(defconst sqlplus-cancel-image + (create-image sqlplus-cancel-xpm 'xpm t)) + +(defconst sqlplus-commit-image + (create-image sqlplus-commit-xpm 'xpm t)) + +(defconst sqlplus-rollback-image + (create-image sqlplus-rollback-xpm 'xpm t)) + +(defconst plsql-prev-mark-image + (create-image plsql-prev-mark-xpm 'xpm t)) + +(defconst plsql-next-mark-image + (create-image plsql-next-mark-xpm 'xpm t)) + +(defvar sqlplus-mode-syntax-table nil + "Syntax table used while in sqlplus-mode.") + +(defvar sqlplus-suppress-show-output-buffer nil) + +;; Local in input buffers +(defvar sqlplus-font-lock-keywords-1 nil) +(make-variable-buffer-local 'sqlplus-font-lock-keywords-1) +(defvar sqlplus-font-lock-keywords-2 nil) +(make-variable-buffer-local 'sqlplus-font-lock-keywords-2) +(defvar sqlplus-font-lock-keywords-3 nil) +(make-variable-buffer-local 'sqlplus-font-lock-keywords-3) + +(defvar sqlplus-font-lock-defaults '((sqlplus-font-lock-keywords-1 sqlplus-font-lock-keywords-2 sqlplus-font-lock-keywords-3) nil t nil nil)) + +(defvar sqlplus-oracle-extra-builtin-functions-re + (concat "\\b" + (regexp-opt '("acos" "asciistr" "asin" "atan" "atan2" "bfilename" "bin_to_num" "bitand" "cardinality" "cast" "coalesce" "collect" + "compose" "corr" "corr_s" "corr_k" "covar_pop" "covar_samp" "cume_dist" "current_date" "current_timestamp" "cv" + "dbtimezone" "decompose" "dense_rank" "depth" "deref" "empty_blob, empty_clob" "existsnode" "extract" + "extractvalue" "first" "first_value" "from_tz" "group_id" "grouping" "grouping_id" "iteration_number" + "lag" "last" "last_value" "lead" "lnnvl" "localtimestamp" "make_ref" "median" "nanvl" "nchr" "nls_charset_decl_len" + "nls_charset_id" "nls_charset_name" "ntile" "nullif" "numtodsinterval" "numtoyminterval" "nvl2" "ora_hash" "path" + "percent_rank" "percentile_cont" "percentile_disc" "powermultiset" "powermultiset_by_cardinality" "presentnnv" + "presentv" "previous" "rank" "ratio_to_report" "rawtonhex" "ref" "reftohex" "regexp_instr" "regexp_replace" + "regexp_substr" "regr_slope" "regr_intercept" "regr_count" "regr_r2" "regr_avgx" "regr_avgy" "regr_sxx" "regr_syy" + "regr_sxy" "remainder" "row_number" "rowidtonchar" "scn_to_timestamp" "sessiontimezone" "stats_binomial_test" + "stats_crosstab" "stats_f_test" "stats_ks_test" "stats_mode" "stats_mw_test" "stats_one_way_anova" "stats_t_test_one" + "stats_t_test_paired" "stats_t_test_indep" "stats_t_test_indepu" "stats_wsr_test" "stddev_pop" "stddev_samp" + "sys_connect_by_path" "sys_context" "sys_dburigen" "sys_extract_utc" "sys_guid" "sys_typeid" "sys_xmlagg" "sys_xmlgen" + "systimestamp" "timestamp_to_scn" "to_binary_double" "to_binary_float" "to_clob" "to_dsinterval" "to_lob" "to_nchar" + "to_nclob" "to_timestamp" "to_timestamp_tz" "to_yminterval" "treat" "tz_offset" "unistr" "updatexml" "value" "var_pop" + "var_samp" "width_bucket" "xmlagg" "xmlcolattval" "xmlconcat" "xmlelement" "xmlforest" "xmlsequence" "xmltransform") t) + "\\b")) +(defvar sqlplus-oracle-extra-warning-words-re + (concat "\\b" + (regexp-opt '("access_into_null" "case_not_found" "collection_is_null" "rowtype_mismatch" + "self_is_null" "subscript_beyond_count" "subscript_outside_limit" "sys_invalid_rowid") t) + "\\b")) +(defvar sqlplus-oracle-extra-keywords-re + (concat "\\b\\(" + "\\(at\\s-+local\\|at\\s-+time\\s-+zone\\|to\\s-+second\\|to\\s-+month\\|is\\s-+present\\|a\\s-+set\\)\\|" + (regexp-opt '("case" "nan" "infinite" "equals_path" "empty" "likec" "like2" "like4" "member" + "regexp_like" "submultiset" "under_path" "mlslabel") t) + "\\)\\b")) +(defvar sqlplus-oracle-extra-pseudocolumns-re + (concat "\\b" + (regexp-opt '("connect_by_iscycle" "connect_by_isleaf" "versions_starttime" "versions_startscn" + "versions_endtime" "versions_endscn" "versions_xid" "versions_operation" "object_id" "object_value" "ora_rowscn" + "xmldata") t) + "\\b")) +(defvar sqlplus-oracle-plsql-extra-reserved-words-re + (concat "\\b" + (regexp-opt '("array" "at" "authid" "bulk" "char_base" "day" "do" "extends" "forall" "heap" "hour" + "interface" "isolation" "java" "limited" "minute" "mlslabel" "month" "natural" "naturaln" "nocopy" "number_base" + "ocirowid" "opaque" "operator" "organization" "pls_integer" "positive" "positiven" "range" "record" "release" "reverse" + "rowtype" "second" "separate" "space" "sql" "timezone_region" "timezone_abbr" "timezone_minute" "timezone_hour" "year" + "zone") t) + "\\b")) +(defvar sqlplus-oracle-extra-types-re + (concat "\\b" + (regexp-opt '("nvarchar2" "binary_float" "binary_double" "timestamp" "interval" "interval_day" "urowid" "nchar" "clob" "nclob" "bfile") t) + "\\b")) + +(defvar sqlplus-commands-regexp-1 nil) +(defvar sqlplus-commands-regexp-23 nil) +(defvar sqlplus-system-variables-regexp-1 nil) +(defvar sqlplus-system-variables-regexp-23 nil) +(defvar sqlplus-v22-commands-font-lock-keywords-1 nil) +(defvar sqlplus-v22-commands-font-lock-keywords-23 nil) +(defvar font-lock-sqlplus-face nil) + +(defvar sqlplus-output-buffer-keymap nil + "Local in output buffer.") +(make-variable-buffer-local 'sqlplus-output-buffer-keymap) + +(defvar sqlplus-kill-function-inhibitor nil) + +(defvar sqlplus-slip-separator-width 2 + "Only for classic table style.") + +(defvar sqlplus-user-string-history nil) + +(defvar sqlplus-object-types '( "CONSUMER GROUP" "SEQUENCE" "SCHEDULE" "PROCEDURE" "OPERATOR" "WINDOW" + "PACKAGE" "LIBRARY" "PROGRAM" "PACKAGE BODY" "JAVA RESOURCE" "XML SCHEMA" + "JOB CLASS" "TRIGGER" "TABLE" "SYNONYM" "VIEW" "FUNCTION" "WINDOW GROUP" + "JAVA CLASS" "INDEXTYPE" "INDEX" "TYPE" "EVALUATION CONTEXT" )) + +(defvar sqlplus-end-of-source-sentinel "%%@@end-of-source-sentinel@@%%") + +(defconst sqlplus-system-variables + '("appi[nfo]" "array[size]" "auto[commit]" "autop[rint]" "autorecovery" "autot[race]" "blo[ckterminator]" "cmds[ep]" + "colsep" "com[patibility]" "con[cat]" "copyc[ommit]" "copytypecheck" "def[ine]" "describe" "echo" "editf[ile]" + "emb[edded]" "esc[ape]" "feed[back]" "flagger" "flu[sh]" "hea[ding]" "heads[ep]" "instance" "lin[esize]" + "lobof[fset]" "logsource" "long" "longc[hunksize]" "mark[up]" "newp[age]" "null" "numf[ormat]" "num[width]" + "pages[ize]" "pau[se]" "recsep" "recsepchar" "serverout[put]" "shift[inout]" "show[mode]" "sqlbl[anklines]" + "sqlc[ase]" "sqlco[ntinue]" "sqln[umber]" "sqlpluscompat[ibility]" "sqlpre[fix]" "sqlp[rompt]" "sqlt[erminator]" + "suf[fix]" "tab" "term[out]" "ti[me]" "timi[ng]" "trim[out]" "trims[pool]" "und[erline]" "ver[ify]" "wra[p]")) + +(defconst sqlplus-commands + '(("@[@]") + (("/" "r[un]")) + ("acc[ept]" + (font-lock-type-face "num[ber]" "char" "date" "binary_float" "binary_double") + (font-lock-keyword-face "for[mat]" "def[ault]" "[no]prompt" "hide")) + ("a[ppend]") + ("archive log" + (font-lock-keyword-face "list" "stop" "start" "next" "all" "to")) + ("attribute" + (font-lock-keyword-face "ali[as]" "cle[ar]" "for[mat]" "like" "on" "off")) + ("bre[ak]" + (font-lock-keyword-face "on" "row" "report" "ski[p]" "page" "nodup[licates]" "dup[licates]")) + ("bti[tle]" + (font-lock-keyword-face "on" "off") + (font-lock-builtin-face "bold" "ce[nter]" "col" "format" "le[ft]" "r[ight]" "s[kip]" "tab")) + ("c[hange]") + ("cl[ear]" + (font-lock-keyword-face "bre[aks]" "buff[er]" "col[umns]" "comp[utes]" "scr[een]" "sql" "timi[ng]")) + ("col[umn]" + (font-lock-keyword-face "ali[as]" "cle[ar]" "entmap" "on" "off" "fold_a[fter]" "fold_b[efore]" "for[mat]" "hea[ding]" + "jus[tify]" "l[eft]" "c[enter]" "r[ight]" "like" "newl[ine]" "new_v[alue]" "nopri[nt]" "pri[nt]" + "nul[l]" "old_v[alue]" "wra[pped]" "wor[d_wrapped]" "tru[ncated]")) + ("comp[ute]" + (font-lock-keyword-face "lab[el]" "of" "on" "report" "row") + (font-lock-builtin-face "avg" "cou[nt]" "min[imum]" "max[imum]" "num[ber]" "sum" "std" "var[iance]")) + ("conn[ect]" + (font-lock-keyword-face "as" "sysoper" "sysdba")) + ("copy") + ("def[ine]") + ("del" + (font-lock-keyword-face "last")) + ("desc[ribe]") + ("disc[onnect]") + ("ed[it]") + ("exec[ute]") + (("exit" "quit") + (font-lock-keyword-face "success" "failure" "warning" "commit" "rollback")) + ("get" + (font-lock-keyword-face "file" "lis[t]" "nol[ist]")) + ("help") + (("ho[st]" "!" "$")) + ("i[nput]") + ("l[ist]" + (font-lock-keyword-face "last")) + ("passw[ord]") + ("pau[se]") + ("pri[nt]") + ("pro[mpt]") + ("recover" + (font-lock-keyword-face "begin" "end" "backup" "automatic" "from" "logfile" "test" "allow" "corruption" "continue" "default" "cancel" + "standby" "database" "until" "time" "change" "using" "controlfile" "tablespace" "datafile" + "consistent" "with" "[no]parallel" "managed" "disconnect" "session" "[no]timeout" "[no]delay" "next" "no" "expire" + "current" "through" "thread" "sequence" "all" "archivelog" "last" "switchover" "immediate" "[no]wait" + "finish" "skip")) + ("rem[ark]") + ("repf[ooter]" + (font-lock-keyword-face "page" "on" "off") + (font-lock-builtin-face "bold" "ce[nter]" "col" "format" "le[ft]" "r[ight]" "s[kip]" "tab")) + ("reph[eader]" + (font-lock-keyword-face "page" "on" "off") + (font-lock-builtin-face "bold" "ce[nter]" "col" "format" "le[ft]" "r[ight]" "s[kip]" "tab")) + ("sav[e]" + (font-lock-keyword-face "file" "cre[ate]" "rep[lace]" "app[end]")) + ("set" + (font-lock-builtin-face sqlplus-system-variables) + (font-lock-keyword-face "on" "off" "immediate" "trace[only]" "explain" "statistics" "native" "v7" "v8" "all" "linenum" "indent" + "entry" "intermediate" "full" "local" "head" "html" "body" "table" "entmap" "spool" "[pre]format" + "none" "[word_]wrapped" "each" "truncated" "[in]visible" "mixed" "lower" "upper")) + ("sho[w]" + (font-lock-keyword-face "all" "bti[tle]" "err[ors]" "function" "procedure" "package[ body]" "trigger" "view" "type[ body]" + "dimension" "java class" "lno" "parameters" "pno" "recyc[lebin]" "rel[ease]" "repf[ooter]" "reph[eader]" + "sga" "spoo[l]" "sqlcode" "tti[tle]" "user") + (font-lock-builtin-face sqlplus-system-variables)) + ("shutdown" + (font-lock-keyword-face "abort" "immediate" "normal" "transactional" "local")) + ("spo[ol]" + ("cre" "create" "rep" "replace" "app" "append" "off" "out")) + ("sta[rt]") + ("startup" + (font-lock-keyword-face "force" "restrict" "pfile" "quiet" "mount" "open" "nomount" "read" "only" "write" "recover")) + ("store" + (font-lock-keyword-face "set" "cre[ate]" "rep[lace]" "app[end]")) + ("timi[ng]" + (font-lock-keyword-face "start" "show" "stop")) + ("tti[tle]" + (font-lock-keyword-face "tti[tle]" "on" "off") + (font-lock-builtin-face "bold" "ce[nter]" "col" "format" "le[ft]" "r[ight]" "s[kip]" "tab")) + ("undef[ine]") + ("var[iable]" + (font-lock-type-face "number" "[n]char" "byte" "[n]varchar2" "[n]clob" "refcursor" "binary_float" "binary_double")) + ("whenever oserror" + (font-lock-keyword-face "exit" "success" "failure" "commit" "rollback" "continue" "commit" "rollback" "none")) + ("whenever sqlerror" + (font-lock-keyword-face "exit" "success" "failure" "warning" "commit" "rollback" "continue" "none")))) + +(defvar plsql-mode-map nil) + +(defstruct sqlplus-global-struct + font-lock-regexps + objects-alist + side-view-buffer + root-dir +) + +(defvar sqlplus-global-structures (make-hash-table :test 'equal) + "Connect string -> sqlplus-global-struct") + +(defun sqlplus-get-objects-alist (&optional connect-string) + (let ((struct (gethash (car (refine-connect-string (or connect-string sqlplus-connect-string sqlplus-process-p))) + sqlplus-global-structures))) + (when struct + (sqlplus-global-struct-objects-alist struct)))) + +(defun sqlplus-set-objects-alist (objects-alist &optional connect-string) + (let ((struct (gethash (car (refine-connect-string (or connect-string sqlplus-connect-string sqlplus-process-p))) + sqlplus-global-structures))) + (when struct + (setf (sqlplus-global-struct-objects-alist struct) objects-alist)))) + +(defun sqlplus-get-font-lock-regexps (&optional connect-string) + (let ((struct (gethash (car (refine-connect-string (or connect-string sqlplus-connect-string sqlplus-process-p))) + sqlplus-global-structures))) + (when struct + (sqlplus-global-struct-font-lock-regexps struct)))) + +(defun sqlplus-set-font-lock-regexps (font-lock-regexps &optional connect-string) + (let ((struct (gethash (car (refine-connect-string (or connect-string sqlplus-connect-string sqlplus-process-p))) + sqlplus-global-structures))) + (when struct + (setf (sqlplus-global-struct-font-lock-regexps struct) font-lock-regexps)))) + +(defun sqlplus-get-side-view-buffer (&optional connect-string) + (let ((struct (gethash (car (refine-connect-string (or connect-string sqlplus-connect-string sqlplus-process-p))) + sqlplus-global-structures))) + (when struct + (sqlplus-global-struct-side-view-buffer struct)))) + +(defun sqlplus-get-root-dir (&optional connect-string) + (let ((struct (gethash (car (refine-connect-string (or connect-string sqlplus-connect-string sqlplus-process-p))) + sqlplus-global-structures))) + (when struct + (sqlplus-global-struct-root-dir struct)))) + +(defun sqlplus-set-root-dir (root-dir &optional connect-string) + (let ((struct (gethash (car (refine-connect-string (or connect-string sqlplus-connect-string sqlplus-process-p))) + sqlplus-global-structures))) + (when struct + (setf (sqlplus-global-struct-root-dir struct) root-dir)))) + +;;; --- + +(defun sqlplus-initial-strings () + (append sqlplus-initial-strings + (list + (concat "btitle left '" sqlplus-page-separator "'") + (concat "repfooter left '" sqlplus-repfooter "'") + (concat "set pagesize " (number-to-string sqlplus-pagesize))))) + +(defun sqlplus-connect-string-lessp (cs1 cs2) + "Compare two connect strings" + (let ((cs1-pair (split-string cs1 "@")) + (cs2-pair (split-string cs2 "@"))) + (or (string< (cadr cs1-pair) (cadr cs2-pair)) + (and (string= (cadr cs1-pair) (cadr cs2-pair)) + (string< (car cs1-pair) (car cs2-pair)))))) + +(defun sqlplus-divide-connect-strings () + "Returns (active-connect-string-list . inactive-connect-string-list)" + (let* ((active-connect-strings + (sort (delq nil (mapcar (lambda (buffer) + (with-current-buffer buffer + (when (and (eq major-mode 'sqlplus-mode) + sqlplus-connect-string) + (let ((cs (car (refine-connect-string sqlplus-connect-string)))) + (when (and (get-buffer (sqlplus-get-process-buffer-name cs)) + (get-process (sqlplus-get-process-name cs))) + (downcase cs)))))) + (buffer-list))) + 'sqlplus-connect-string-lessp)) + (inactive-connect-strings + (sort (delq nil (mapcar (lambda (pair) + (unless (member (downcase (car pair)) active-connect-strings) (downcase (car pair))) ) + sqlplus-connect-strings-alist)) + 'sqlplus-connect-string-lessp))) + (setq active-connect-strings (remove-duplicates active-connect-strings :test 'equal)) + (setq inactive-connect-strings (remove-duplicates inactive-connect-strings :test 'equal)) + (cons active-connect-strings inactive-connect-strings))) + +(defun sqlplus-connections-menu (menu) + (condition-case err + (let* ((connect-strings-pair (sqlplus-divide-connect-strings)) + (active-connect-strings (car connect-strings-pair)) + (inactive-connect-strings (cdr connect-strings-pair))) + (append + (list ["New connection..." sqlplus t]) + (list ["Tnsnames.ora" sqlplus-find-tnsnames t]) + (list ["Command Line" sqlplus-command-line t]) + (when (eq major-mode 'sqlplus-mode) + (list + "----" + ["Evaluate Statement" sqlplus-send-current sqlplus-connect-string] + ["Explain Statement" sqlplus-explain sqlplus-connect-string] + ["Evaluate Statement (HTML)" sqlplus-send-current-html sqlplus-connect-string] + ["Evaluate Region" sqlplus-send-region (and (mark) sqlplus-connect-string)])) + (when orcl-mode + (list + "----" + ["Send Commit" sqlplus-send-commit sqlplus-connect-string] + ["Send Rollback" sqlplus-send-rollback sqlplus-connect-string] + ["Restart Connection" sqlplus-restart-connection sqlplus-connect-string] + ["Show History" sqlplus-show-history sqlplus-connect-string] + ["Get Source from DB" sqlplus-get-source sqlplus-connect-string] + ["Interrupt Evaluation" sqlplus-send-interrupt sqlplus-connect-string] + ["Compare schema to filesystem" sqlplus-compare-schema-to-filesystem sqlplus-connect-string] + "----" + (list "Output" + ["Show window" sqlplus-buffer-display-window t] + "----" + ["Redisplay" sqlplus-buffer-redisplay-current t] + ["Previous" sqlplus-buffer-prev-command t] + ["Next" sqlplus-buffer-next-command t] + "----" + ["Scroll Right" sqlplus-buffer-scroll-right t] + ["Scroll Left" sqlplus-buffer-scroll-left t] + ["Scroll Down" sqlplus-buffer-scroll-down t] + ["Scroll Up" sqlplus-buffer-scroll-up t] + "----" + ["Bottom" sqlplus-buffer-bottom t] + ["Top" sqlplus-buffer-top t] + "----" + ["Erase" sqlplus-buffer-erase t]) + )) + (when inactive-connect-strings + (append + (list "----") + (list (append (list "Recent Connections") + (mapcar (lambda (connect-string) + (vector connect-string (list 'apply ''sqlplus + (list 'sqlplus-read-connect-string connect-string)) t)) inactive-connect-strings))))) + (when active-connect-strings + (append + (list "----") + (mapcar (lambda (connect-string) + (vector connect-string (list 'apply ''sqlplus + (list 'sqlplus-read-connect-string connect-string)) t)) active-connect-strings))) + )) + (error (message (error-message-string err))))) + +(defun sqlplus-send-commit () + "Send 'commit' command to SQL*Process." + (interactive) + (sqlplus-check-connection) + (sqlplus-execute sqlplus-connect-string "commit;" nil nil)) + +(defun sqlplus-send-rollback () + "Send 'rollback' command to SQL*Process." + (interactive) + (sqlplus-check-connection) + (sqlplus-execute sqlplus-connect-string "rollback;" nil nil)) + +(defun sqlplus-show-history () + "Show command history for current connection." + (interactive) + (sqlplus-check-connection) + (sqlplus-verify-buffer sqlplus-connect-string) + (switch-to-buffer (sqlplus-get-history-buffer sqlplus-connect-string))) + +(defun sqlplus-restart-connection () + "Kill SQL*Plus process and start again." + (interactive) + (sqlplus-check-connection) + (sqlplus-verify-buffer sqlplus-connect-string) + (let ((connect-stringos sqlplus-connect-string)) + (unwind-protect + (progn + (setq sqlplus-kill-function-inhibitor t) + (sqlplus-shutdown connect-stringos t)) + (setq sqlplus-kill-function-inhibitor nil)) + (sqlplus connect-stringos (sqlplus-get-input-buffer-name connect-stringos)))) + +(define-skeleton plsql-begin + "begin..end skeleton" + "" ; interactor + "begin" ?\n + > _ ?\n + "end;" >) + +(define-skeleton plsql-loop + "loop..end loop skeleton" + "" ; interactor + "loop" ?\n + > _ ?\n + "end loop;" >) + +(define-skeleton plsql-if + "if..end if skeleton" + "" ; interactor + "if " _ " then" ?\n + > ?\n + "end if;" >) + +;;; SQLPLUS-mode Keymap - + +(unless orcl-mode-map + (setq orcl-mode-map (make-sparse-keymap)) + (define-key orcl-mode-map "\C-c\C-o" 'sqlplus-buffer-display-window) + (define-key orcl-mode-map "\C-c\C-l" 'sqlplus-buffer-redisplay-current) + (define-key orcl-mode-map "\C-c\C-p" 'sqlplus-buffer-prev-command) + (define-key orcl-mode-map [C-S-up] 'sqlplus-buffer-prev-command) + (define-key orcl-mode-map "\C-c\C-n" 'sqlplus-buffer-next-command) + (define-key orcl-mode-map [C-S-down] 'sqlplus-buffer-next-command) + (define-key orcl-mode-map "\C-c\C-b" 'sqlplus-buffer-scroll-right) + (define-key orcl-mode-map [C-S-left] 'sqlplus-buffer-scroll-right) + (define-key orcl-mode-map "\C-c\C-f" 'sqlplus-buffer-scroll-left) + (define-key orcl-mode-map [C-S-right] 'sqlplus-buffer-scroll-left) + (define-key orcl-mode-map "\C-c\M-v" 'sqlplus-buffer-scroll-down) + (define-key orcl-mode-map "\C-c\C-v" 'sqlplus-buffer-scroll-up) + (define-key orcl-mode-map "\C-c>" 'sqlplus-buffer-bottom) + (define-key orcl-mode-map "\C-c<" 'sqlplus-buffer-top) + (define-key orcl-mode-map "\C-c\C-w" 'sqlplus-buffer-erase) + (define-key orcl-mode-map "\C-c\C-m" 'sqlplus-send-commit) + (define-key orcl-mode-map "\C-c\C-a" 'sqlplus-send-rollback) + (define-key orcl-mode-map "\C-c\C-k" 'sqlplus-restart-connection) + (define-key orcl-mode-map "\C-c\C-t" 'sqlplus-show-history) + (define-key orcl-mode-map "\C-c\C-s" 'sqlplus-get-source) + (define-key orcl-mode-map "\C-c\C-i" 'sqlplus-send-interrupt) + (define-key orcl-mode-map [S-return] 'sqlplus-send-user-string) + (define-key orcl-mode-map [tool-bar sqlplus-restart-connection] + (list 'menu-item "Restart connection" 'sqlplus-restart-connection :image sqlplus-kill-image)) + (define-key orcl-mode-map [tool-bar sqlplus-cancel] + (list 'menu-item "Cancel" 'sqlplus-send-interrupt :image sqlplus-cancel-image)) + (define-key orcl-mode-map [tool-bar sqlplus-rollback] + (list 'menu-item "Rollback" 'sqlplus-send-rollback :image sqlplus-rollback-image)) + (define-key orcl-mode-map [tool-bar sqlplus-commit] + (list 'menu-item "Commit" 'sqlplus-send-commit :image sqlplus-commit-image))) + +(unless sqlplus-mode-map + (setq sqlplus-mode-map (make-sparse-keymap)) + (define-key sqlplus-mode-map "\C-c\C-g" 'plsql-begin) + (define-key sqlplus-mode-map "\C-c\C-q" 'plsql-loop) + (define-key sqlplus-mode-map "\C-c\C-z" 'plsql-if) + (define-key sqlplus-mode-map "\C-c\C-r" 'sqlplus-send-region) + (define-key sqlplus-mode-map [C-return] 'sqlplus-send-current) + (define-key sqlplus-mode-map [M-return] 'sqlplus-explain) + (define-key sqlplus-mode-map "\C-c\C-e" 'sqlplus-send-current) + (define-key sqlplus-mode-map "\C-c\C-j" 'sqlplus-send-current-html) + (define-key sqlplus-mode-map [C-S-return] 'sqlplus-send-current-html) + (define-key sqlplus-mode-map "\M-." 'sqlplus-file-get-source) + (define-key sqlplus-mode-map [C-down-mouse-1] 'sqlplus-mouse-select-identifier) + (define-key sqlplus-mode-map [C-mouse-1] 'sqlplus-file-get-source-mouse) + ) + +(easy-menu-add-item nil nil sqlplus-connections-menu t) + +(unless sqlplus-mode-syntax-table + (setq sqlplus-mode-syntax-table (make-syntax-table)) + (modify-syntax-entry ?/ ". 14" sqlplus-mode-syntax-table) ; comment start + (modify-syntax-entry ?* ". 23" sqlplus-mode-syntax-table) + (modify-syntax-entry ?+ "." sqlplus-mode-syntax-table) + (modify-syntax-entry ?. "." sqlplus-mode-syntax-table) + (modify-syntax-entry ?\" "." sqlplus-mode-syntax-table) + (modify-syntax-entry ?\\ "." sqlplus-mode-syntax-table) + (modify-syntax-entry ?- ". 12b" sqlplus-mode-syntax-table) + (modify-syntax-entry ?\n "> b" sqlplus-mode-syntax-table) + (modify-syntax-entry ?= "." sqlplus-mode-syntax-table) + (modify-syntax-entry ?% "w" sqlplus-mode-syntax-table) + (modify-syntax-entry ?< "." sqlplus-mode-syntax-table) + (modify-syntax-entry ?> "." sqlplus-mode-syntax-table) + (modify-syntax-entry ?& "w" sqlplus-mode-syntax-table) + (modify-syntax-entry ?| "." sqlplus-mode-syntax-table) + (modify-syntax-entry ?_ "w" sqlplus-mode-syntax-table) ; _ is word char + (modify-syntax-entry ?\' "\"" sqlplus-mode-syntax-table)) + +;;; SQL*Plus mode + +(defun connect-string-to-string () + (let ((txt (or (car (refine-connect-string sqlplus-connect-string)) "disconnected")) + (result)) + (if (string-match "^\\(.*?\\)\\(\\w*prod\\w*\\)$" txt) + (if (>= emacs-major-version 22) + (setq result (list (list :propertize (substring txt 0 (match-beginning 2)) 'face '((:foreground "blue"))) + (list :propertize (substring txt (match-beginning 2)) 'face '((:foreground "red")(:weight bold))))) + (setq result (setq txt (propertize txt 'face '((:foreground "blue"))))) + (put-text-property (match-beginning 2) (match-end 2) 'face '((:foreground "red")(:weight bold)) txt)) + (setq result + (if (>= emacs-major-version 22) + (list :propertize txt 'face '((:foreground "blue"))) + (setq txt (propertize txt 'face '((:foreground "blue"))))))) + result)) + +(defun sqlplus-font-lock (type-symbol limit) + (let ((sqlplus-font-lock-regexps (sqlplus-get-font-lock-regexps))) + (when sqlplus-font-lock-regexps + (let ((regexp (gethash type-symbol sqlplus-font-lock-regexps))) + (when regexp + (re-search-forward regexp limit t)))))) + +;; Local in input buffer (sqlplus-mode) +(defvar sqlplus-command-overlay nil) +(make-variable-buffer-local 'sqlplus-command-overlay) +(defvar sqlplus-begin-command-overlay-arrow-position nil) +(make-variable-buffer-local 'sqlplus-begin-command-overlay-arrow-position) +(defvar sqlplus-end-command-overlay-arrow-position nil) +(make-variable-buffer-local 'sqlplus-end-command-overlay-arrow-position) + +(defun sqlplus-highlight-current-sqlplus-command() + (when (and window-system sqlplus-command-highlighting-style) + (let* ((pair (sqlplus-mark-current)) + (begin (and (car pair) (save-excursion (goto-char (car pair)) (skip-chars-forward " \t\n") (point)))) + (end (and (cdr pair) (save-excursion (goto-char (cdr pair)) (skip-chars-backward " \t\n") (beginning-of-line) (point)))) + (point-line-beg (save-excursion (beginning-of-line) (point))) + (overlay-begin begin) + (overlay-end end)) + (when (and begin end) + (when (< end point-line-beg) + (save-excursion (goto-char point-line-beg) (when (eobp) (insert "\n"))) + (setq end point-line-beg) + (setq overlay-end end)) + (when (or (>= begin end) (< (point) begin)) + (when (or (< (point) begin) (> begin end)) + (setq overlay-begin nil + overlay-end nil)) + (setq begin nil + end nil))) + (if (and overlay-begin overlay-end (memq sqlplus-command-highlighting-style '(background fringe-and-background))) + (progn + (setq overlay-end (save-excursion + (goto-char overlay-end) + (beginning-of-line 2) + (point))) + (move-overlay sqlplus-command-overlay overlay-begin overlay-end)) + (move-overlay sqlplus-command-overlay 1 1)) + (if (memq sqlplus-command-highlighting-style '(fringe fringe-and-background)) + (progn + (put 'sqlplus-begin-command-overlay-arrow-position 'overlay-arrow-bitmap 'top-left-angle) + (put 'sqlplus-end-command-overlay-arrow-position 'overlay-arrow-bitmap 'bottom-left-angle) + (set-marker sqlplus-begin-command-overlay-arrow-position begin) + (set-marker sqlplus-end-command-overlay-arrow-position end)) + (set-marker sqlplus-begin-command-overlay-arrow-position nil) + (set-marker sqlplus-end-command-overlay-arrow-position nil))))) + +(defun sqlplus-find-begin-of-sqlplus-command () + (save-excursion + (beginning-of-line) + (while (and (not (bobp)) (save-excursion (end-of-line 0) (skip-chars-backward " \t") (equal (char-before) ?-))) + (beginning-of-line 0)) + (point))) + +(defun sqlplus-find-end-of-sqlplus-command () + (save-excursion + (end-of-line) + (while (progn (skip-chars-backward " \t") (and (not (eobp)) (equal (char-before) ?-))) + (end-of-line 2)) + (point))) + +(defun sqlplus-set-font-lock-emacs-structures-for-level (level mode-symbol) + (let ((result (append sql-mode-oracle-font-lock-keywords + (default-value (cond ((equal level 3) 'sqlplus-font-lock-keywords-3) + ((equal level 2) 'sqlplus-font-lock-keywords-2) + ((equal level 1) 'sqlplus-font-lock-keywords-1) + (t nil)))))) + (when (featurep 'plsql) + (setq result (append (symbol-value 'plsql-oracle-font-lock-fix-re) result))) + (setq result + (append + ;; Names for schemas, tables, synonyms, views, columns, sequences, packages, triggers and indexes + (when (> level 2) + (mapcar (lambda (pair) + (let ((type-symbol (car pair)) + (face (cadr pair))) + (cons (eval `(lambda (limit) (sqlplus-font-lock ',type-symbol limit))) face))) + sqlplus-syntax-faces)) + ;; SQL*Plus + (when (eq mode-symbol 'sqlplus-mode) + (unless sqlplus-commands-regexp-1 + (flet ((first-form-fun (cmds) (mapcar (lambda (name) (car (sqlplus-full-forms name))) cmds)) + (all-forms-fun (cmds) (mapcan 'sqlplus-full-forms cmds)) + (sqlplus-commands-regexp-fun (form-fun cmds) (concat "^" (regexp-opt (funcall form-fun cmds) t) "\\b")) + (sqlplus-system-variables-fun (form-fun vars) (concat "\\b" (regexp-opt (funcall form-fun vars) t) "\\b"))) + (flet ((sqlplus-v22-commands-font-lock-keywords-fun + (form-fun) + (delq nil + (mapcar + (lambda (command-info) + (let* ((names (car command-info)) + (names-list (if (listp names) names (list names))) + (sublists (cdr command-info))) + (when sublists + (append (list (sqlplus-commands-regexp-fun form-fun names-list)) + (mapcar (lambda (sublist) + (let ((face (car sublist)) + (regexp (concat "\\b" + (regexp-opt (mapcan (lambda (name) (sqlplus-full-forms name)) + (mapcan (lambda (elem) + (if (symbolp elem) + (copy-list (symbol-value elem)) + (list elem))) + (cdr sublist))) + t) + "\\b"))) + (list regexp '(sqlplus-find-end-of-sqlplus-command) nil (list 1 face)))) + sublists) + (list '("\\(\\w+\\)" (sqlplus-find-end-of-sqlplus-command) nil (1 font-lock-sqlplus-face))))))) + sqlplus-commands)))) + (let ((commands (mapcan + (lambda (command-info) (let ((names (car command-info))) (if (listp names) (copy-list names) (list names)))) + sqlplus-commands))) + (setq sqlplus-commands-regexp-1 (sqlplus-commands-regexp-fun 'first-form-fun commands)) + (setq sqlplus-commands-regexp-23 (sqlplus-commands-regexp-fun 'all-forms-fun commands)) + (if (<= emacs-major-version 21) + (setq sqlplus-system-variables-regexp-1 (sqlplus-system-variables-fun 'first-form-fun sqlplus-system-variables) + sqlplus-system-variables-regexp-23 (sqlplus-system-variables-fun 'all-forms-fun sqlplus-system-variables)) + (setq sqlplus-v22-commands-font-lock-keywords-1 (sqlplus-v22-commands-font-lock-keywords-fun 'first-form-fun) + sqlplus-v22-commands-font-lock-keywords-23 (sqlplus-v22-commands-font-lock-keywords-fun 'all-forms-fun))))))) + (append (list + ;; Comments (REM command) + (cons "^\\(rem\\)\\b\\(.*?\\)$" '((1 font-lock-keyword-face nil nil) (2 font-lock-comment-face t nil))) + ;; Predefined SQL*Plus variables + (cons (concat "\\b" + (regexp-opt '("_CONNECT_IDENTIFIER" "_DATE" "_EDITOR" "_O_VERSION" "_O_RELEASE" "_PRIVILEGE" + "_SQLPLUS_RELEASE" "_USER") t) + "\\b") + 'font-lock-builtin-face) + ;; SQL*Plus commands (+ shortcuts if level >= 2) + (cons + (concat (if (>= level 2) sqlplus-commands-regexp-23 sqlplus-commands-regexp-1) "\\|^\\(@@\\|@\\|!\\|/\\|\\$\\)" ) + 'font-lock-keyword-face)) + (if (<= emacs-major-version 21) + ;; SQL*Plus system variables (+ shortcuts if level >= 2) + (list (cons (if (>= level 2) sqlplus-system-variables-regexp-23 sqlplus-system-variables-regexp-1) 'font-lock-builtin-face)) + ;; ver. >= 22 + (if (>= level 2) sqlplus-v22-commands-font-lock-keywords-23 sqlplus-v22-commands-font-lock-keywords-1)))) + ; (cons "\\b\\([a-zA-Z$_#0-9]+\\)\\b\\.\\(\\b[a-zA-Z$_#0-9]+\\b\\)" '((1 font-lock-type-face nil nil)(2 font-lock-variable-name-face nil nil))) + (list + ;; Extra Oracle syntax highlighting, not recognized by sql-mode or plsql-mode + (cons sqlplus-oracle-extra-types-re 'font-lock-type-face) + (cons sqlplus-oracle-extra-warning-words-re 'font-lock-warning-face) + (cons sqlplus-oracle-extra-types-re 'font-lock-type-face) + (cons sqlplus-oracle-extra-keywords-re 'font-lock-keyword-face) + (cons sqlplus-oracle-plsql-extra-reserved-words-re 'font-lock-keyword-face) + (if (string-match "XEmacs\\|Lucid" emacs-version) + (cons sqlplus-oracle-extra-pseudocolumns-re 'font-lock-preprocessor-face) + (cons sqlplus-oracle-extra-pseudocolumns-re 'font-lock-builtin-face)) + (if (string-match "XEmacs\\|Lucid" emacs-version) + (cons sqlplus-oracle-extra-builtin-functions-re 'font-lock-preprocessor-face) + (cons sqlplus-oracle-extra-builtin-functions-re 'font-lock-builtin-face)) + ;; SQL*Plus variable names, like '&name' or '&&name' + (cons "\\(\\b&[&a-zA-Z$_#0-9]+\\b\\)" 'font-lock-variable-name-face)) + result + ;; Function calls + (when (>= level 2) + (list (cons "\\b\\(\\([a-zA-Z$_#0-9]+\\b\\)\\.\\)?\\(\\b[a-zA-Z$_#0-9]+\\b\\)\\s-*(" + '((2 font-lock-type-face nil t) + (3 font-lock-function-name-face nil nil))))))) + result)) + +(defun sqlplus-mode nil + "Mode for editing and executing SQL*Plus commands. Entry into this mode runs the hook +'sqlplus-mode-hook'. + +Use \\[sqlplus] to start the SQL*Plus interpreter. + +Just position the cursor on or near the SQL*Plus statement you +wish to send and press '\\[sqlplus-send-current]' to run it and +display the results. + +Mode Specific Bindings: + +\\{sqlplus-mode-map}" + (interactive) + (run-hooks 'change-major-mode-hook) + (setq major-mode 'sqlplus-mode + mode-name "SQL*Plus") + (use-local-map sqlplus-mode-map) + (set-syntax-table sqlplus-mode-syntax-table) + (make-local-variable 'comment-start) + (make-local-variable 'comment-end) + (setq comment-start "/* " + comment-end " */") + (orcl-mode 1) + (setq sqlplus-font-lock-keywords-1 (sqlplus-set-font-lock-emacs-structures-for-level 1 major-mode) + sqlplus-font-lock-keywords-2 (sqlplus-set-font-lock-emacs-structures-for-level 2 major-mode) + sqlplus-font-lock-keywords-3 (sqlplus-set-font-lock-emacs-structures-for-level 3 major-mode)) + (when (featurep 'plsql) + (set (make-local-variable 'indent-line-function) + (lambda () (interactive) (condition-case err (funcall (symbol-function 'plsql-indent)) (error (message "Error: %S" err))))) + (set (make-local-variable 'indent-region-function) 'plsql-indent-region) + (set (make-local-variable 'align-mode-rules-list) 'plsql-align-rules-list)) + (setq font-lock-defaults sqlplus-font-lock-defaults) + (unless sqlplus-connect-string + (let ((potential-connect-string (sqlplus-get-potential-connect-string (buffer-file-name)))) + (when (and potential-connect-string + (get-process (sqlplus-get-process-name potential-connect-string))) + (setq sqlplus-connect-string potential-connect-string)))) + (set (make-local-variable 'font-lock-extend-after-change-region-function) + (lambda (beg end old-len) + (cons (save-excursion (goto-char beg) (sqlplus-find-begin-of-sqlplus-command)) + (save-excursion (goto-char end) (sqlplus-find-end-of-sqlplus-command))))) + (unless font-lock-sqlplus-face + (copy-face 'default 'font-lock-sqlplus-face) + (setq font-lock-sqlplus-face 'font-lock-sqlplus-face)) + (turn-on-font-lock) + (unless frame-background-mode + (setq frame-background-mode (if (< (sqlplus-color-percentage (face-background 'default)) 50) 'dark 'light))) + (setq imenu-generic-expression '((nil "^--[ ]*\\([^;.\n]*\\)" 1))) + ;; if input buffer has sqlplus-mode then prepare it for command under cursor selection + (when (and (eq major-mode 'sqlplus-mode) (null sqlplus-begin-command-overlay-arrow-position)) + (setq sqlplus-begin-command-overlay-arrow-position (make-marker) + sqlplus-end-command-overlay-arrow-position (make-marker) + sqlplus-command-overlay (make-overlay 1 1)) + (overlay-put sqlplus-command-overlay 'face 'sqlplus-command-highlight-face) + (when (and (>= emacs-major-version 22) (not (memq 'sqlplus-begin-command-overlay-arrow-position overlay-arrow-variable-list))) + (push 'sqlplus-begin-command-overlay-arrow-position overlay-arrow-variable-list)) + (when (and (>= emacs-major-version 22) (not (memq 'sqlplus-end-command-overlay-arrow-position overlay-arrow-variable-list))) + (push 'sqlplus-end-command-overlay-arrow-position overlay-arrow-variable-list)) + (add-hook 'pre-command-hook (lambda () + (set-marker sqlplus-begin-command-overlay-arrow-position nil) + (set-marker sqlplus-end-command-overlay-arrow-position nil)) + nil t) + (add-hook 'post-command-hook (lambda () + (sqlplus-clear-mouse-selection) + (set-marker sqlplus-begin-command-overlay-arrow-position nil) + (set-marker sqlplus-end-command-overlay-arrow-position nil)) + nil t)) + (run-hooks 'sqlplus-mode-hook)) + +(defun sqlplus-color-percentage (color) + (truncate (* (/ (/ (reduce '+ (color-values color)) 3.0) 65535.0) 100.0))) + +(defun sqlplus-get-potential-connect-string (file-path) + (when file-path + (let* ((file-name (file-name-nondirectory file-path)) + (extension (file-name-extension file-name)) + (case-fold-search t)) + (when (and extension + (string-match (concat "^" sqlplus-session-file-extension "$") extension) + (string-match "@" file-name)) + (car (refine-connect-string (file-name-sans-extension file-name))))))) + +(defun sqlplus-check-connection () + (if orcl-mode + (unless sqlplus-connect-string + (let* ((potential-connect-string (sqlplus-get-potential-connect-string (buffer-file-name))) + (connect-string (car (sqlplus-read-connect-string nil (or potential-connect-string + (caar (sqlplus-divide-connect-strings))))))) + (sqlplus connect-string (buffer-name)))) + (error "Current buffer is not determined to communicate with Oracle"))) + +;;; Utilitities + +(defun sqlplus-echo-in-buffer (buffer-name string &optional force-display hide-after-head) + "Displays string in the named buffer, creating the buffer if needed. If force-display is true, the buffer will appear +if not already shown." + (let ((buffer (get-buffer buffer-name))) + (when buffer + (if force-display (display-buffer buffer)) + (with-current-buffer buffer + (while (and (> (buffer-size) sqlplus-output-buffer-max-size) + (progn (goto-char (point-min)) + (unless (eobp) (forward-char)) + (re-search-forward (concat "^" (regexp-quote sqlplus-output-separator)) nil t))) + (delete-region 1 (- (point) (length sqlplus-output-separator)))) + + (goto-char (point-max)) + (let ((start-point (point))) + (insert string) + (when hide-after-head + (let ((from-pos (string-match "\n" string)) + (keymap (make-sparse-keymap)) + overlay) + (when from-pos + (setq overlay (make-overlay (+ start-point from-pos) (- (+ start-point (length string)) 2))) + (when (or (not (consp buffer-invisibility-spec)) + (not (assq 'hide-symbol buffer-invisibility-spec))) + (add-to-invisibility-spec '(hide-symbol . t))) + (overlay-put overlay 'invisible 'hide-symbol) + (put-text-property start-point (- (+ start-point (length string)) 2) 'help-echo string) + (put-text-property start-point (- (+ start-point (length string)) 2) 'mouse-face 'highlight) + (put-text-property start-point (- (+ start-point (length string)) 2) 'keymap sqlplus-output-buffer-keymap))))) + (if force-display + (set-window-point (get-buffer-window buffer-name) (point-max))))))) + +(defun sqlplus-verify-buffer (connect-string) + (let ((output-buffer-name (sqlplus-get-output-buffer-name connect-string)) + (process-buffer-name (sqlplus-get-process-buffer-name connect-string))) + (when (not (get-buffer process-buffer-name)) + (sqlplus-shutdown connect-string) + (error "No SQL*Plus session! Use 'M-x sqlplus' to start the SQL*Plus interpreter")) + (unless (get-buffer-process process-buffer-name) + (sqlplus-shutdown connect-string) + (error "Buffer '%s' is not talking to anybody!" output-buffer-name))) + t) + +(defun sqlplus-get-context (connect-string &optional id) + (let ((process-buffer (sqlplus-get-process-buffer-name connect-string))) + (when process-buffer + (with-current-buffer process-buffer + (when id + (while (and sqlplus-command-contexts + (not (equal (sqlplus-get-context-value (car sqlplus-command-contexts) :id) id))) + (setq sqlplus-command-contexts (cdr sqlplus-command-contexts)))) + (car sqlplus-command-contexts))))) + +(defun sqlplus-get-context-value (context var-symbol) + (cdr (assq var-symbol context))) + +(defun sqlplus-set-context-value (context var-symbol value) + (let ((association (assq var-symbol context))) + (if association + (setcdr association value) + (setcdr context (cons (cons var-symbol value) (cdr context)))) + context)) + +(defun sqlplus-mark-current () + "Marks the current SQL for sending to the SQL*Plus process. Marks are placed around a region defined by empty lines." + (let (begin end empty-line-p empty-line-p next-line-included tail-p) + (save-excursion + (beginning-of-line) + (setq empty-line-p (when (looking-at "^[ \t]*\\(\n\\|\\'\\)") (point))) + (setq next-line-included (and empty-line-p (save-excursion (skip-chars-forward " \t\n") (> (current-column) 0)))) + (setq tail-p (and empty-line-p + (or (bobp) (save-excursion (beginning-of-line 0) (looking-at "^[ \t]*\n")))))) + (unless tail-p + (save-excursion + (end-of-line) + (re-search-backward "\\`\\|\n[\r\t ]*\n[^ \t]" nil t) + (skip-syntax-forward "-") + (setq begin (point))) + (save-excursion + (beginning-of-line) + (re-search-forward "\n[\r\t ]*\n[^ \t]\\|\\'" nil t) + (unless (zerop (length (match-string 0))) + (backward-char 1)) + (skip-syntax-backward "-") + (setq end (or (and (not next-line-included) empty-line-p) (point))))) + (cons begin end))) + +;;; Transmission Commands + +(defun sqlplus-send-current (arg &optional html) + "Send the current SQL command(s) to the SQL*Plus process. With argument, show results in raw form." + (interactive "P") + (sqlplus-check-connection) + (when (buffer-file-name) + (condition-case err + (save-buffer) + (error (message (error-message-string err))))) + (let ((region (sqlplus-mark-current))) + (setq sqlplus-region-beginning-pos (car region) + sqlplus-region-end-pos (cdr region))) + (if (and sqlplus-region-beginning-pos sqlplus-region-end-pos) + (sqlplus-send-region arg sqlplus-region-beginning-pos sqlplus-region-end-pos nil html) + (error "Point doesn't indicate any command to execute"))) + +(defun sqlplus-send-current-html (arg) + (interactive "P") + (sqlplus-send-current arg t)) + + +;;; SQLPLUS-Output Buffer Operations - + +(defun sqlplus--show-buffer (connect-string fcn args) + (let* ((output-buffer-name (sqlplus-get-output-buffer-name connect-string))) + (sqlplus-verify-buffer connect-string) + (if sqlplus-suppress-show-output-buffer + (with-current-buffer (get-buffer output-buffer-name) + (if fcn (condition-case err (apply fcn args) (error (message (error-message-string err)))))) + (if (not (eq (window-buffer (selected-window)) (get-buffer output-buffer-name))) + (switch-to-buffer-other-window output-buffer-name)) + (if fcn (condition-case err (apply fcn args) (error (message (error-message-string err)))))))) + +(defun sqlplus-show-buffer (&optional connect-string fcn &rest args) + "Makes the SQL*Plus output buffer visible in the other window." + (interactive) + (setq connect-string (or connect-string sqlplus-connect-string)) + (unless connect-string + (error "Current buffer is disconnected!")) + (let ((output-buffer-name (sqlplus-get-output-buffer-name connect-string))) + (if (and output-buffer-name + (eq (current-buffer) (get-buffer output-buffer-name))) + (sqlplus--show-buffer connect-string fcn args) + (save-excursion + (save-selected-window + (sqlplus--show-buffer connect-string fcn args)))))) + +(fset 'sqlplus-buffer-display-window 'sqlplus-show-buffer) + +(defun sqlplus-buffer-scroll-up (&optional connect-string) + "Scroll-up in the SQL*Plus output buffer window." + (interactive) + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'scroll-up)) + +(defun sqlplus-buffer-scroll-down (&optional connect-string) + "Scroll-down in the SQL*Plus output buffer window." + (interactive) + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'scroll-down)) + +(defun sqlplus-scroll-left (num) + (call-interactively 'scroll-left)) + +(defun sqlplus-scroll-right (num) + (call-interactively 'scroll-right)) + +(defun sqlplus-buffer-scroll-left (num &optional connect-string) + "Scroll-left in the SQL*Plus output buffer window." + (interactive "p") + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'sqlplus-scroll-left (* num (/ (window-width) 2)))) + +(defun sqlplus-buffer-scroll-right (num &optional connect-string) + "Scroll-right in the SQL*Plus output buffer window." + (interactive "p") + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'sqlplus-scroll-right (* num (/ (window-width) 2)))) + +(defun sqlplus-buffer-mark-current (&optional connect-string) + "Mark the current position in the SQL*Plus output window." + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'sqlplus-buffer-make-mark)) + +(defun sqlplus-buffer-make-mark (&optional connect-string) + "Set the sqlplus-buffer-marker." + (setq sqlplus-buffer-mark (copy-marker (point)))) + +(defun sqlplus-buffer-redisplay-current (&optional connect-string) + "Go to the current sqlplus-buffer-mark." + (interactive) + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'sqlplus-goto-mark)) + +(defun sqlplus-goto-mark () + (goto-char sqlplus-buffer-mark) + (recenter 0)) + +(defun sqlplus-buffer-top (&optional connect-string) + "Goto the top of the SQL*Plus output buffer." + (interactive) + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'sqlplus-beginning-of-buffer)) + +(defun sqlplus-beginning-of-buffer nil (goto-char (point-min))) + +(defun sqlplus-buffer-bottom (&optional connect-string) + "Goto the bottom of the SQL*Plus output buffer." + (interactive) + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'sqlplus-end-of-buffer)) + +(defun sqlplus-end-of-buffer nil (goto-char (point-max)) (unless sqlplus-suppress-show-output-buffer (recenter -1))) + +(defun sqlplus-buffer-erase (&optional connect-string) + "Clear the SQL output buffer." + (interactive) + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'erase-buffer)) + +(defun sqlplus-buffer-next-command (&optional connect-string) + "Search for the next command in the SQL*Plus output buffer." + (interactive) + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'sqlplus-next-command)) + +(defun sqlplus-next-command nil + "Search for the next command in the SQL*Plus output buffer." + (cond ((re-search-forward (concat "^" (regexp-quote sqlplus-output-separator)) nil t) + (forward-line 2) + (recenter 0)) + (t (beep) (message "No more commands.")))) + +(defun sqlplus-buffer-prev-command (&optional connect-string) + "Search for the previous command in the SQL*Plus output buffer." + (interactive) + (sqlplus-show-buffer (or connect-string sqlplus-connect-string) 'sqlplus-previous-command)) + +(defun sqlplus-previous-command nil + "Search for the previous command in the SQL*Plus output buffer." + (let ((start (point))) + (re-search-backward (concat "^" (regexp-quote sqlplus-output-separator)) nil t) + (cond ((re-search-backward (concat "^" (regexp-quote sqlplus-output-separator)) nil t) + (forward-line 2) + (recenter 0)) + (t + (message "No more commands.") (beep) + (goto-char start))))) + +(defun sqlplus-send-interrupt nil + "Send an interrupt the the SQL*Plus interpreter process." + (interactive) + (sqlplus-check-connection) + (let ((connect-string sqlplus-connect-string)) + (sqlplus-verify-buffer connect-string) + (interrupt-process (get-process (sqlplus-get-process-name connect-string))))) + + +;;; SQL Interpreter + +(defun refine-connect-string (connect-string &optional no-slash) + "Z connect stringa do SQL*Plusa wycina haslo, tj. np. 'ponaglenia/x@SID' -> ('ponaglenia@SID' . 'x')." + (let (result passwd) + (when connect-string + (setq result + (if (string-match "\\(\\`[^@/]*?\\)/\\([^/@:]*\\)\\(.*?\\'\\)" connect-string) + (progn + (setq passwd (match-string 2 connect-string)) + (concat (match-string 1 connect-string) (match-string 3 connect-string))) + connect-string)) + (when no-slash + (while (string-match "/" result) + (setq result (replace-match "!" nil t result))))) + (cons result passwd))) + +(defun sqlplus-get-output-buffer-name (connect-string) + (concat "*" (car (refine-connect-string connect-string)) "*")) + +(defun sqlplus-get-input-buffer-name (connect-string) + (concat (car (refine-connect-string connect-string)) (concat "." sqlplus-session-file-extension))) + +(defun sqlplus-get-history-buffer-name (connect-string) + (concat " " (car (refine-connect-string connect-string)) "-hist")) + +(defun sqlplus-get-process-buffer-name (connect-string) + (concat " " (car (refine-connect-string connect-string)))) + +(defun sqlplus-get-process-name (connect-string) + (car (refine-connect-string connect-string))) + +(defun sqlplus-read-connect-string (&optional connect-string default-connect-string) + "Ask user for connect string with password, with DEFAULT-CONNECT-STRING proposed. +DEFAULT-CONNECT-STRING nil means first inactive connect-string on sqlplus-connect-strings-alist. +CONNECT-STRING non nil means ask for password only if CONNECT-STRING has no password itself. +Returns (qualified-connect-string refined-connect-string)." + (unless default-connect-string + (let ((inactive-connect-strings (cdr (sqlplus-divide-connect-strings)))) + (setq default-connect-string + (some (lambda (pair) + (when (member (car pair) inactive-connect-strings) (car pair))) + sqlplus-connect-strings-alist)))) + (let* ((cs (downcase (or connect-string + (read-string (format "Connect string%s: " (if default-connect-string (format " [default %s]" default-connect-string) "")) + nil 'sqlplus-connect-string-history default-connect-string)))) + (pair (refine-connect-string cs)) + (refined-cs (car pair)) + (password (cdr pair)) + (was-password password) + (association (assoc refined-cs sqlplus-connect-strings-alist))) + (unless (or password current-prefix-arg) + (setq password (cdr association))) + (unless password + (setq password (read-passwd (format "Password for %s: " cs)))) + (unless was-password + (if (string-match "@" cs) + (setq cs (replace-match (concat "/" password "@") t t cs)) + (setq cs (concat cs "/" password)))) + (list cs refined-cs))) + +(defun sqlplus (connect-string &optional input-buffer-name output-buffer-flag) + "Create SQL*Plus process connected to Oracle according to +CONNECT-STRING, open (or create) input buffer with specified +name (do not create if INPUT-BUFFER-NAME is nil). +OUTPUT-BUFFER-FLAG has meanings: nil or SHOW-OUTPUT-BUFFER - +create output buffer and show it, DONT-SHOW-OUTPUT-BUFFER - +create output buffer but dont show it, DONT-CREATE-OUTPUT-BUFFER +- dont create output buffer" + (interactive (let ((pair (sqlplus-read-connect-string))) + (list (car pair) (concat (cadr pair) (concat "." sqlplus-session-file-extension))))) + (set (make-local-variable 'comment-start-skip) "/\\*+ *\\|--+ *") + (set (make-local-variable 'comment-multi-line) t) + ;; create sqlplus-session-cache-dir if not exists + (when sqlplus-session-cache-dir + (condition-case err + (unless (file-directory-p sqlplus-session-cache-dir) + (make-directory sqlplus-session-cache-dir t)) + (error (message (error-message-string err))))) + (let* ((was-input-buffer (and input-buffer-name (get-buffer input-buffer-name))) + (input-buffer (or was-input-buffer + (when input-buffer-name + (if sqlplus-session-cache-dir + (let ((buf (find-file-noselect + (concat + (file-name-as-directory sqlplus-session-cache-dir) + (car (refine-connect-string connect-string t)) + (concat "." sqlplus-session-file-extension))))) + (condition-case nil + (with-current-buffer buf + (rename-buffer input-buffer-name)) + (error nil)) + buf) + (get-buffer-create input-buffer-name))))) + (output-buffer (or (and (not (eq output-buffer-flag 'dont-create-output-buffer)) + (get-buffer-create (sqlplus-get-output-buffer-name connect-string))) + (get-buffer (sqlplus-get-output-buffer-name connect-string)))) + (process-name (sqlplus-get-process-name connect-string)) + (process-buffer-name (sqlplus-get-process-buffer-name connect-string)) + (was-process (get-process process-name)) + process-created + (process (or was-process + (let (proc) + (puthash (car (refine-connect-string connect-string)) + (make-sqlplus-global-struct :font-lock-regexps (make-hash-table :test 'equal) + :side-view-buffer (when (featurep 'ide-skel) (sqlplus-create-side-view-buffer connect-string))) + sqlplus-global-structures) + ;; push current connect string to the beginning of sqlplus-connect-strings-alist + (let* ((refined-cs (refine-connect-string connect-string))) + (setq sqlplus-connect-strings-alist (delete* (car refined-cs) sqlplus-connect-strings-alist :test 'string= :key 'car)) + (push refined-cs sqlplus-connect-strings-alist)) + (sqlplus-get-history-buffer connect-string) + (when output-buffer + (with-current-buffer output-buffer + (erase-buffer))) + (setq process-created t + proc (start-process process-name process-buffer-name sqlplus-command connect-string)) + (set-process-sentinel proc (lambda (process event) + (let ((proc-buffer (buffer-name (process-buffer process))) + (output-buffer (get-buffer (sqlplus-get-output-buffer-name (process-name process)))) + err-msg + (exited-abnormally (string-match "\\`exited abnormally with code" event))) + (when output-buffer + (with-current-buffer output-buffer + (goto-char (point-max)) + (insert (format "\n%s" event)) + (when exited-abnormally + (setq sqlplus-connect-strings-alist + (delete* (car (refine-connect-string sqlplus-connect-string)) + sqlplus-connect-strings-alist :test 'string= :key 'car)) + (when proc-buffer + (with-current-buffer proc-buffer + (save-excursion + (goto-char (point-min)) + (when (re-search-forward "^ORA-[0-9]+.*$" nil t) + (setq err-msg (match-string 0)))) + (erase-buffer))) + (when err-msg + (insert (concat "\n" err-msg))))))))) + (process-kill-without-query proc (not sqlplus-kill-processes-without-query-on-exit-flag)) + (set-process-filter proc 'sqlplus-process-filter) + (with-current-buffer (get-buffer process-buffer-name) + (setq sqlplus-process-p connect-string)) + proc)))) + (when output-buffer + (with-current-buffer output-buffer + (orcl-mode 1) + (set (make-local-variable 'line-move-ignore-invisible) t) + (setq sqlplus-output-buffer-keymap (make-sparse-keymap) + sqlplus-connect-string connect-string + truncate-lines t) + (define-key sqlplus-output-buffer-keymap "\C-m" (lambda () (interactive) (sqlplus-output-buffer-hide-show))) + (define-key sqlplus-output-buffer-keymap [S-mouse-2] (lambda (event) (interactive "@e") (sqlplus-output-buffer-hide-show))) + (local-set-key [S-return] 'sqlplus-send-user-string))) + (when input-buffer + (with-current-buffer input-buffer + (setq sqlplus-connect-string connect-string))) + ;; if input buffer was created then switch it to sqlplus-mode + (when (and input-buffer (not was-input-buffer)) + (with-current-buffer input-buffer + (unless (eq major-mode 'sqlplus-mode) + (sqlplus-mode))) + (when font-lock-mode (font-lock-mode 1)) + (set-window-buffer (sqlplus-get-workbench-window) input-buffer)) + ;; if process was created then get information for font lock + (when process-created + (sqlplus-execute connect-string nil nil (sqlplus-initial-strings) 'no-echo) + (let ((plsql-font-lock-level (sqlplus-font-lock-value-in-major-mode font-lock-maximum-decoration 'plsql-mode)) + (sqlplus-font-lock-level (sqlplus-font-lock-value-in-major-mode font-lock-maximum-decoration 'sqlplus-mode))) + (when (or (equal plsql-font-lock-level t) (equal sqlplus-font-lock-level t) + (and (numberp plsql-font-lock-level) (>= plsql-font-lock-level 2)) + (and (numberp sqlplus-font-lock-level) (>= sqlplus-font-lock-level 2))) + (sqlplus-hidden-select connect-string + (concat "select distinct column_name, 'COLUMN', ' ' from user_tab_columns where column_name not like 'BIN$%'\n" + "union\n" + "select username, 'SCHEMA', ' ' from all_users where username not like 'BIN$%'\n" + "union\n" + "select object_name, object_type, decode( status, 'INVALID', 'I', ' ' ) from user_objects\n" + "where object_name not like 'BIN$%'\n" + "and object_type in ('VIEW', 'SEQUENCE', 'PACKAGE', 'TRIGGER', 'TABLE', 'SYNONYM', 'INDEX', 'FUNCTION', 'PROCEDURE');") + 'sqlplus-my-handler)))) + (when input-buffer + (save-selected-window + (when (equal (selected-window) (sqlplus-get-side-window)) + (select-window (sqlplus-get-workbench-window))) + (switch-to-buffer input-buffer))) + (let ((saved-window (cons (selected-window) (window-buffer (selected-window)))) + (input-buffer (get-buffer (sqlplus-get-input-buffer-name connect-string)))) + (when (or (eq output-buffer-flag 'show-output-buffer) (null output-buffer-flag)) + (sqlplus-show-buffer connect-string)) + (if (window-live-p (car saved-window)) + (select-window (car saved-window)) + (if (get-buffer-window (cdr saved-window)) + (select-window (get-buffer-window (cdr saved-window))) + (when (and input-buffer + (get-buffer-window input-buffer)) + (select-window (get-buffer-window input-buffer)))))) + ;; executing initial sequence (between /* init */ and /* end */) + (when (and (not was-process) input-buffer) + (with-current-buffer input-buffer + (save-excursion + (goto-char (point-min)) + (when (re-search-forward (concat "^" sqlplus-init-sequence-start-regexp "\\s-*\n\\(\\(.\\|\n\\)*?\\)\n" sqlplus-init-sequence-end-regexp) nil t) + (when (match-string 1) + (sqlplus-send-region nil (match-beginning 1) (match-end 1) t)))))))) + +;; Command under cursor selection mechanism +(when window-system + (run-with-idle-timer 0 t (lambda () (when (eq major-mode 'sqlplus-mode) (sqlplus-highlight-current-sqlplus-command)))) + (run-with-idle-timer 1 t (lambda () + (when (eq major-mode 'sqlplus-mode) + (if (>= (sqlplus-color-percentage (face-background 'default)) 50) + (set-face-attribute 'sqlplus-command-highlight-face nil + :background (sqlplus-shine-color (face-background 'default) (- sqlplus-command-highlighting-percentage))) + (set-face-attribute 'sqlplus-command-highlight-face nil + :background (sqlplus-shine-color (face-background 'default) sqlplus-command-highlighting-percentage))))))) + +(defun sqlplus-output-buffer-hide-show () + (if (and (consp buffer-invisibility-spec) + (assq 'hide-symbol buffer-invisibility-spec)) + (remove-from-invisibility-spec '(hide-symbol . t)) + (add-to-invisibility-spec '(hide-symbol . t))) + (let ((overlay (car (overlays-at (point))))) + (when overlay + (goto-char (overlay-start overlay)) + (beginning-of-line))) + (recenter 0)) + +(defun sqlplus-font-lock-value-in-major-mode (alist mode-symbol) + (if (consp alist) + (cdr (or (assq mode-symbol alist) (assq t alist))) + alist)) + +(defun sqlplus-get-history-buffer (connect-string) + (let* ((history-buffer-name (sqlplus-get-history-buffer-name connect-string)) + (history-buffer (get-buffer history-buffer-name))) + (unless history-buffer + (setq history-buffer (get-buffer-create history-buffer-name)) + (with-current-buffer history-buffer + (setq sqlplus-cs connect-string) + (add-hook 'kill-buffer-hook 'sqlplus-history-buffer-kill-function nil t))) + history-buffer)) + +(defun sqlplus-history-buffer-kill-function () + (when sqlplus-history-dir + (condition-case err + (progn + (unless (file-directory-p sqlplus-history-dir) + (make-directory sqlplus-history-dir t)) + (append-to-file 1 (buffer-size) (concat (file-name-as-directory sqlplus-history-dir) (car (refine-connect-string sqlplus-cs t)) "-hist.txt"))) + (error (message (error-message-string err)))))) + +(defun sqlplus-soft-shutdown (connect-string) + (unless (some (lambda (buffer) + (with-current-buffer buffer + (and sqlplus-connect-string + (equal (car (refine-connect-string sqlplus-connect-string)) + (car (refine-connect-string connect-string)))))) + (buffer-list)) + (sqlplus-shutdown connect-string))) + +(defun sqlplus-shutdown (connect-string &optional dont-kill-input-buffer) + "Kill input, output and process buffer for specified CONNECT-STRING." + (let ((input-buffers (delq nil (mapcar (lambda (buffer) (with-current-buffer buffer + (when (and (eq major-mode 'sqlplus-mode) + (equal (car (refine-connect-string sqlplus-connect-string)) + (car (refine-connect-string connect-string)))) + buffer))) (buffer-list)))) + (output-buffer (get-buffer (sqlplus-get-output-buffer-name connect-string))) + (history-buffer (get-buffer (sqlplus-get-history-buffer-name connect-string))) + (process-buffer (get-buffer (sqlplus-get-process-buffer-name connect-string)))) + (when history-buffer + (kill-buffer history-buffer)) + (when (and process-buffer + (with-current-buffer process-buffer sqlplus-process-p)) + (when (get-process (sqlplus-get-process-name connect-string)) + (delete-process (sqlplus-get-process-name connect-string))) + (kill-buffer process-buffer)) + (when (and output-buffer + (with-current-buffer output-buffer sqlplus-connect-string)) + (when (buffer-file-name output-buffer) + (with-current-buffer output-buffer + (save-buffer))) + (kill-buffer output-buffer)) + (dolist (input-buffer input-buffers) + (when (buffer-file-name input-buffer) + (with-current-buffer input-buffer + (save-buffer))) + (unless dont-kill-input-buffer + (kill-buffer input-buffer))))) + +(defun sqlplus-magic () + (let (bottom-message pos) + (delete-region (point) (progn (beginning-of-line 3) (point))) + (setq bottom-message (buffer-substring (point) (save-excursion (end-of-line) (point)))) + (setq pos (point)) + (when (re-search-forward "^-------" nil t) + (delete-region pos (progn (beginning-of-line 2) (point))) + (while (re-search-forward "|" (save-excursion (end-of-line) (point)) t) + (save-excursion + (backward-char) + (if (or (bolp) (save-excursion (forward-char) (eolp))) + (while (member (char-after) '(?- ?|)) + (delete-char 1) + (sqlplus-next-line)) + (while (member (char-after) '(?- ?|)) + (delete-char 1) + (insert " ") + (backward-char) + (sqlplus-next-line))))) + (beginning-of-line 3) + (re-search-forward "^---" nil t) + (goto-char (match-beginning 0)) + (delete-region (point) (point-max)) + (insert (format "%s\n\n%s\n" sqlplus-repfooter bottom-message)) + ))) + + +(defun sqlplus-process-command-output (context connect-string begin end interrupted) + (let* ((output-buffer-name (sqlplus-get-output-buffer-name connect-string)) + (output-buffer (get-buffer output-buffer-name)) + (process-buffer (sqlplus-get-process-buffer-name connect-string)) + str + error-list show-errors-p + slips-count + (user-function (sqlplus-get-context-value context :user-function)) + (result-function (sqlplus-get-context-value context :result-table-function)) + (last-compiled-file-path (sqlplus-get-context-value context :last-compiled-file-path)) + (compilation-expected (sqlplus-get-context-value context :compilation-expected)) + (columns-count (sqlplus-get-context-value context :columns-count)) + (sql (sqlplus-get-context-value context :sql)) + (original-buffer (current-buffer)) + explain-plan + table-data) + (setq slips-count columns-count) + (with-temp-buffer + (insert-buffer-substring original-buffer begin end) + (goto-char (point-min)) + (while (re-search-forward (concat "\n+" (regexp-quote sqlplus-page-separator) "\n") nil t) + (replace-match "\n")) + (goto-char (point-min)) + (setq str (buffer-string)) + (while (string-match (concat "^" (regexp-quote sqlplus-repfooter) "\n") str) + (setq str (replace-match "" nil t str))) + + ;; compilation errors? + (goto-char (point-min)) + (skip-chars-forward "\n\t ") + (when (and ;;(not (equal (point) (point-max))) + plsql-auto-parse-errors-flag + output-buffer + last-compiled-file-path + (re-search-forward "^\\(LINE/COL\\|\\(SP2\\|CPY\\|ORA\\)-[0-9]\\{4,5\\}:\\|No errors\\|Nie ma b..d.w\\|Keine Fehler\\|No hay errores\\|Identificateur erron\\|Nessun errore\\|N..o h.. erros\\)" nil t)) + (goto-char (point-min)) + (setq error-list (plsql-parse-errors last-compiled-file-path) + show-errors-p compilation-expected)) + + ;; explain? + (let ((case-fold-search t)) + (goto-char (point-min)) + (skip-chars-forward "\n\t ") + (when (and sql + (string-match "^[\n\t ]*explain\\>" sql) + (looking-at "Explained[.]")) + (delete-region (point-min) (point-max)) + (setq str "") + (sqlplus--send connect-string + "select plan_table_output from table(dbms_xplan.display(null, null, 'TYPICAL'));" + nil + 'no-echo + nil))) + + ;; plan table output? + (goto-char (point-min)) + (skip-chars-forward "\n\t ") + (when (and (looking-at "^PLAN_TABLE_OUTPUT\n") + sqlplus-format-output-tables-flag + (not compilation-expected) + (not show-errors-p)) + (sqlplus-magic) ;; TODO + (goto-char (point-min)) + (re-search-forward "^[^\n]+" nil t) + (delete-region (point-min) (progn (beginning-of-line) (point))) + ;; (setq slips-count 1) + (setq explain-plan t) + (setq table-data (save-excursion (sqlplus-parse-output-table interrupted)))) + + ;; query result? + (goto-char (point-min)) + (when (and sqlplus-format-output-tables-flag + (not compilation-expected) + (not table-data) + (not show-errors-p) + (not (re-search-forward "^LINE/COL\\>" nil t))) + (setq table-data (save-excursion (sqlplus-parse-output-table interrupted)))) + (if user-function + (funcall user-function connect-string context (or table-data str)) + (when output-buffer + (with-current-buffer output-buffer + (save-excursion + (goto-char (point-max)) + (cond (show-errors-p + (insert str) + (plsql-display-errors (file-name-directory last-compiled-file-path) error-list) + (let* ((plsql-buf (get-file-buffer last-compiled-file-path)) + (win (when plsql-buf (car (get-buffer-window-list plsql-buf))))) + (when win + (select-window win)))) + ((and table-data + (car table-data)) + (if result-function + (funcall result-function connect-string table-data) + (let ((b (point)) + (warning-regexp (regexp-opt sqlplus-explain-plan-warning-regexps)) + e) + (sqlplus-draw-table table-data slips-count) + (when interrupted (insert ". . .\n")) + (setq e (point)) + (when explain-plan + (save-excursion + (goto-char b) + (while (re-search-forward warning-regexp nil t) + (add-text-properties (match-beginning 0) (match-end 0) + (list 'face (list (cons 'foreground-color "red") (list :weight 'bold) + (get-text-property (match-beginning 0) 'face)))))))))) + (t + (insert str)))))))))) + +(defun sqlplus-result-online (connect-string context string last-chunk) + (let ((output-buffer (sqlplus-get-output-buffer-name connect-string))) + (when output-buffer + (with-current-buffer output-buffer + (save-excursion + (goto-char (point-max)) + (insert string)))))) + +(defvar sqlplus-prompt-regexp (concat "^" (regexp-quote sqlplus-prompt-prefix) "\\([0-9]+\\)" (regexp-quote sqlplus-prompt-suffix))) + +(defvar sqlplus-page-separator-regexp (concat "^" (regexp-quote sqlplus-page-separator))) + +(defun sqlplus-process-filter (process string) + (with-current-buffer (process-buffer process) + (let* ((prompt-safe-len (+ (max (+ (length sqlplus-prompt-prefix) (length sqlplus-prompt-suffix)) (length sqlplus-page-separator)) 10)) + current-context-id filter-input-processed + (connect-string sqlplus-process-p) + (chunk-begin-pos (make-marker)) + (chunk-end-pos (make-marker)) + (prompt-found (make-marker)) + (context (sqlplus-get-context connect-string current-context-id)) + (current-command-input-buffer-name (sqlplus-get-context-value context :current-command-input-buffer-name)) + (current-command-input-buffer-names (when current-command-input-buffer-name (list current-command-input-buffer-name)))) + (set-marker chunk-begin-pos (max 1 (- (point) prompt-safe-len))) + (goto-char (point-max)) + (insert string) + (unless current-command-input-buffer-names + (setq current-command-input-buffer-names + (delq nil (mapcar (lambda (buffer) (with-current-buffer buffer + (when (and (memq major-mode '(sqlplus-mode plsql-mode)) + sqlplus-connect-string + (equal (car (refine-connect-string sqlplus-connect-string)) + (car (refine-connect-string connect-string)))) + buffer))) (buffer-list))))) + ;; fan animation + (dolist (current-command-input-buffer-name current-command-input-buffer-names) + (let ((input-buffer (get-buffer current-command-input-buffer-name))) + (when input-buffer + (with-current-buffer input-buffer + (setq sqlplus-fan + (cond ((equal sqlplus-fan "|") "/") + ((equal sqlplus-fan "/") "-") + ((equal sqlplus-fan "-") "\\") + ((equal sqlplus-fan "\\") "|"))) + (put-text-property 0 (length sqlplus-fan) 'face '((foreground-color . "red")) sqlplus-fan) + (put-text-property 0 (length sqlplus-fan) 'help-echo (sqlplus-get-context-value context :sql) sqlplus-fan) + (force-mode-line-update))))) + (unwind-protect + (while (not filter-input-processed) + (let* ((context (sqlplus-get-context connect-string current-context-id)) + (dont-parse-result (sqlplus-get-context-value context :dont-parse-result)) + (current-command-input-buffer-name (sqlplus-get-context-value context :current-command-input-buffer-name)) + (result-function (sqlplus-get-context-value context :result-function)) + (skip-to-the-end-of-command (sqlplus-get-context-value context :skip-to-the-end-of-command))) + (set-marker prompt-found nil) + (goto-char chunk-begin-pos) + (set-marker chunk-end-pos + (if (or (re-search-forward sqlplus-prompt-regexp nil t) + (re-search-forward "^SQL> " nil t)) + (progn + (set-marker prompt-found (match-end 0)) + (when (match-string 1) + (setq current-context-id (string-to-number (match-string 1)))) + (match-beginning 0)) + (point-max))) + (cond ((and (equal chunk-begin-pos chunk-end-pos) ; at the end of command + (marker-position prompt-found)) + ;; deactivate fan + (dolist (current-command-input-buffer-name current-command-input-buffer-names) + (let ((input-buffer (get-buffer current-command-input-buffer-name))) + (when input-buffer + (with-current-buffer input-buffer + (remove-text-properties 0 (length sqlplus-fan) '(face nil) sqlplus-fan) + (force-mode-line-update))))) + (delete-region 1 prompt-found) + (when dont-parse-result + (funcall (or result-function 'sqlplus-result-online) connect-string context "" t)) + (sqlplus-set-context-value context :skip-to-the-end-of-command nil) + (set-marker chunk-begin-pos 1)) + ((equal chunk-begin-pos chunk-end-pos) + (when dont-parse-result + (delete-region 1 (point-max))) + (setq filter-input-processed t)) + (dont-parse-result + (funcall (or result-function 'sqlplus-result-online) + connect-string + context + (buffer-substring chunk-begin-pos chunk-end-pos) + (marker-position prompt-found)) + (set-marker chunk-begin-pos chunk-end-pos)) + (t + (when (not skip-to-the-end-of-command) + (goto-char (max 1 (- chunk-begin-pos 4010))) + (let ((page-separator-found + (save-excursion (let ((pos (re-search-forward (concat sqlplus-page-separator-regexp "[^-]*\\(^-\\|^ e b) + (buffer-substring b e) + ""))) + (col-preferred-width (string-width col-name))) + ;; (put-text-property 0 (length col-name) 'face '(bold) col-name) + (push (make-col-desc :id col-counter :name col-name :start-pos col-begin + :end-pos col-end :max-width col-max-width :preferred-width col-preferred-width :min-prefix-len col-max-width) + column-infos) + (incf col-counter) + (goto-char ed) + (if (equal (char-after) ?\n) + (progn + (beginning-of-line 3) + (incf record-lines)) + (forward-char))) + (setq finish t))) + (decf record-lines) + (setq column-infos (nreverse column-infos)) + (forward-line -1) + + ;; at the first char of first data cell. + ;; table parsing... + (while (< (point) end) + (let (record last-start-pos) + (dolist (column-info column-infos) + (let ((start-pos (col-desc-start-pos column-info)) + (end-pos (col-desc-end-pos column-info)) + width len value b e l) + (when (and last-start-pos + (<= start-pos last-start-pos)) + (forward-line)) + (setq last-start-pos start-pos) + (move-to-column start-pos) + (setq b (point)) + (move-to-column end-pos) + (setq e (point)) + (move-to-column start-pos) + (setq l (skip-chars-forward " " e)) + (when (and (col-desc-min-prefix-len column-info) + (< l (- e b)) + (< l (col-desc-min-prefix-len column-info))) + (setf (col-desc-min-prefix-len column-info) + (if (looking-at "[0-9]") l nil))) + (move-to-column end-pos) + (skip-chars-backward " " b) + (setq value (if (> (point) b) (buffer-substring b (point)) "")) + (setq len (length value) + width (string-width value)) + (when (and sqlplus-select-result-max-col-width + (> len sqlplus-select-result-max-col-width)) + (setq value (concat (substring value 0 sqlplus-select-result-max-col-width) "...") + len (length value) + width (string-width value))) + (when (> width (col-desc-preferred-width column-info)) + (setf (col-desc-preferred-width column-info) width)) + (when (and (< l (- e b)) + (memq (col-desc-numeric column-info) '(nil y))) + (setf (col-desc-numeric column-info) + (if (string-match "\\` *[-+0-9Ee.,$]+\\'" value) 'y 'n))) + (push value record))) + (forward-line) + (when (> record-lines 1) + (forward-line)) + (setq last-start-pos nil + record (nreverse record)) + (push record rows))) + (setq rows (nreverse rows)) + (list column-infos rows last-msg))))) + +(defun sqlplus-draw-table (lst &optional slips-count) + "SLIPS-COUNT (nil means compute automatically)." + ;; current buffer: SQL*Plus output buffer + (when window-system + (if (>= (sqlplus-color-percentage (face-background 'default)) 50) + (progn + (set-face-attribute 'sqlplus-table-head-face nil + :background (sqlplus-shine-color (face-background 'default) -70) :foreground (face-background 'default)) + (set-face-attribute 'sqlplus-table-even-rows-face nil + :background (sqlplus-shine-color (face-background 'default) -20) :overline (face-background 'default)) + (set-face-attribute 'sqlplus-table-odd-rows-face nil + :background (sqlplus-shine-color (face-background 'default) -30) :overline (face-background 'default))) + (set-face-attribute 'sqlplus-table-head-face nil + :background (sqlplus-shine-color (face-background 'default) +70) :foreground (face-background 'default)) + (set-face-attribute 'sqlplus-table-even-rows-face nil + :background (sqlplus-shine-color (face-background 'default) +20) :overline (face-background 'default)) + (set-face-attribute 'sqlplus-table-odd-rows-face nil + :background (sqlplus-shine-color (face-background 'default) +30) :overline (face-background 'default)))) + (let* ((column-infos (car lst)) + (rows (cadr lst)) + (slip-width 0) + (table-header-height 1) + (table-area-width (1- (let ((side-window (sqlplus-get-side-window))) (if side-window (window-width side-window) (frame-width))))) + ;; may be nil, which means no limit + (table-area-height (let ((side-window (sqlplus-get-side-window))) + (when side-window + (- (window-height side-window) 2 (if mode-line-format 1 0) (if header-line-format 1 0))))) + (column-separator-width (if sqlplus-elegant-style 1.2 (max (length sqlplus-table-col-separator) (length sqlplus-table-col-head-separator)))) + rows-per-slip ;; data rows per slip + (slip-separator-width (if sqlplus-elegant-style 1.5 sqlplus-slip-separator-width)) + (slip-separator (make-string (max 0 (if sqlplus-elegant-style 1 sqlplus-slip-separator-width)) ?\ )) + (last-msg (caddr lst))) + (when sqlplus-elegant-style + (put-text-property 0 1 'display (cons 'space (list :width slip-separator-width)) slip-separator)) + (when (<= table-area-height table-header-height) + (setq table-area-height nil)) + (when (and window-system sqlplus-elegant-style table-area-height (> table-area-height 3)) + ;; overline makes glyph higher... + (setq table-area-height (- table-area-height (round (/ (* 20.0 (- table-area-height 3)) (face-attribute 'default :height)))))) + (when column-infos + (goto-char (point-max)) + (beginning-of-line) + ;; slip width (without separator between slips) + (dolist (col-info column-infos) + (when (col-desc-min-prefix-len col-info) + (setf (col-desc-preferred-width col-info) (max (string-width (col-desc-name col-info)) + (- (col-desc-preferred-width col-info) (col-desc-min-prefix-len col-info))))) + (incf slip-width (+ (col-desc-preferred-width col-info) column-separator-width))) + (when (> slip-width 0) + (setq slip-width (+ (- slip-width column-separator-width) (if sqlplus-elegant-style 1.0 0)))) + ;; computing slip count if not known yet + (unless slips-count + (setq slips-count + (if table-area-height (min (ceiling (/ (float (length rows)) (max 1 (- table-area-height table-header-height 2)))) + (max 1 (floor (/ (float table-area-width) (+ slip-width slip-separator-width))))) + 1))) + (setq slips-count (max 1 (min slips-count (length rows)))) ; slip count <= data rows + (setq rows-per-slip (ceiling (/ (float (length rows)) slips-count))) + (when (> rows-per-slip 0) + (setq slips-count (max 1 (min (ceiling (/ (float (length rows)) rows-per-slip)) slips-count)))) + + (let ((table-begin-point (point))) + (dotimes (slip-no slips-count) + (let ((row-no 0) + (slip-begin-point (point)) + (rows-processed 0)) + ;; column names + (dolist (col-info column-infos) + (let* ((col-name (col-desc-name col-info)) + (spaces (max 0 (- (col-desc-preferred-width col-info) (string-width col-name)))) + (last-col-p (>= (1+ (col-desc-id col-info)) (length column-infos))) + (val (format (if sqlplus-elegant-style " %s%s %s" "%s%s%s") + col-name + (make-string spaces ?\ ) + (if last-col-p "" (if sqlplus-elegant-style " " sqlplus-table-col-separator))))) + (put-text-property 0 (if (or (not sqlplus-elegant-style) last-col-p) (length val) (1- (length val))) + 'face 'sqlplus-table-head-face val) + (when sqlplus-elegant-style + (put-text-property 0 1 'display '(space . (:width 0.5)) val) + (put-text-property (- (length val) (if last-col-p 1 2)) (- (length val) (if last-col-p 0 1)) 'display '(space . (:width 0.5)) val) + (unless last-col-p + (put-text-property (- (length val) 1) (length val) 'display '(space . (:width 0.2)) val))) + (insert val))) + (insert slip-separator) + (insert "\n") + ;; data rows + (while (and (< rows-processed rows-per-slip) + rows) + (let ((row (car rows))) + (setq rows (cdr rows)) + (incf rows-processed) + (let ((col-infos column-infos)) + (dolist (value row) + (let* ((col-info (car col-infos)) + (numeric-p (eq (col-desc-numeric col-info) 'y)) + (min-prefix (col-desc-min-prefix-len col-info))) + (when (and min-prefix + value + (>= (length value) min-prefix)) + (setq value (substring value min-prefix))) + (let* ((spaces (max 0 (- (col-desc-preferred-width col-info) (string-width value)))) + (val (if numeric-p + (format (if sqlplus-elegant-style " %s%s %s" "%s%s%s") + (make-string spaces ?\ ) + value + (if (cdr col-infos) (if sqlplus-elegant-style " " sqlplus-table-col-separator) "")) + (format (if sqlplus-elegant-style " %s%s %s" "%s%s%s") + value + (make-string spaces ?\ ) + (if (cdr col-infos) (if sqlplus-elegant-style " " sqlplus-table-col-separator) ""))))) + (put-text-property 0 (if (and sqlplus-elegant-style (cdr col-infos)) (- (length val) 1) (length val)) + 'face (if (evenp row-no) + 'sqlplus-table-even-rows-face + 'sqlplus-table-odd-rows-face) val) + (when sqlplus-elegant-style + (put-text-property 0 1 'display '(space . (:width 0.5)) val) + (put-text-property (- (length val) (if (cdr col-infos) 2 1)) + (- (length val) (if (cdr col-infos) 1 0)) + 'display '(space . (:width 0.5)) val) + (when (cdr col-infos) + (put-text-property (- (length val) 1) (length val) 'display '(space . (:width 0.2)) val))) + (setq col-infos (cdr col-infos)) + (insert val)))) + (incf row-no) + (insert slip-separator) + (insert "\n")))) + (when (> slip-no 0) + (delete-backward-char 1) + (let ((slip-end-point (point))) + (kill-rectangle slip-begin-point slip-end-point) + (delete-region slip-begin-point (point-max)) + (goto-char table-begin-point) + (end-of-line) + (yank-rectangle) + (goto-char (point-max)) + )))) + (goto-char (point-max)) + (when (and last-msg (> (length last-msg) 0)) + (unless sqlplus-elegant-style (insert "\n")) + (let ((s (format "%s\n\n" (replace-regexp-in-string "\n+" " " last-msg)))) + (when sqlplus-elegant-style + (put-text-property (- (length s) 2) (1- (length s)) 'display '(space . (:height 1.5)) s)) + (insert s))))))) + +(defun sqlplus-send-user-string (str) + (interactive (progn (sqlplus-check-connection) + (if sqlplus-connect-string + (list (read-string "Send to process: " nil 'sqlplus-user-string-history "")) + (error "Works only in SQL*Plus buffer")))) + (let ((connect-string sqlplus-connect-string)) + (sqlplus-verify-buffer connect-string) + (let* ((process (get-process (sqlplus-get-process-name connect-string))) + (output-buffer-name (sqlplus-get-output-buffer-name connect-string))) + (sqlplus-echo-in-buffer output-buffer-name (concat str "\n")) + (send-string process (concat str "\n"))))) + +(defun sqlplus-prepare-update-alist (table-data) + (let ((column-infos (car table-data)) + (rows (cadr table-data)) + (msg (caddr table-data)) + alist) + (dolist (row rows) + (let* ((object-name (car row)) + (object-type (intern (downcase (cadr row)))) + (status (caddr row)) + (regexp-list (cdr (assq object-type alist))) + (pair (cons object-name (equal status "I")))) + (if regexp-list + (setcdr regexp-list (cons pair (cdr regexp-list))) + (setq regexp-list (list pair)) + (setq alist (cons (cons object-type regexp-list) alist))))) + alist)) + +(defun sqlplus-my-update-handler (connect-string table-data) + (let ((alist (sqlplus-prepare-update-alist table-data))) + (when (featurep 'ide-skel) + (funcall 'sqlplus-side-view-update-data connect-string alist)))) + +(defun sqlplus-my-handler (connect-string table-data) + (let ((alist (sqlplus-prepare-update-alist table-data)) + (sqlplus-font-lock-regexps (sqlplus-get-font-lock-regexps connect-string))) + (sqlplus-set-objects-alist alist connect-string) + (when (featurep 'ide-skel) + (funcall 'sqlplus-side-view-update-data connect-string alist)) + (clrhash sqlplus-font-lock-regexps) + (dolist (lst sqlplus-syntax-faces) + (let* ((object-type (car lst)) + (regexp-list (append (caddr lst) (mapcar 'car (cdr (assq object-type alist)))))) + (when regexp-list + (puthash object-type (concat "\\b" (regexp-opt regexp-list t) "\\b") sqlplus-font-lock-regexps)))) + (let ((map sqlplus-font-lock-regexps)) + (mapc (lambda (buffer) + (with-current-buffer buffer + (when (and (memq major-mode '(sqlplus-mode plsql-mode)) + (equal sqlplus-connect-string connect-string)) + (when font-lock-mode (font-lock-mode 1))))) + (buffer-list))))) + +(defun sqlplus-get-source-function (connect-string context string last-chunk) + (let* ((source-text (sqlplus-get-context-value context :source-text)) + (source-type (sqlplus-get-context-value context :source-type)) + (source-name (sqlplus-get-context-value context :source-name)) + (source-extension (sqlplus-get-context-value context :source-extension)) + (name (concat (upcase source-name) "." source-extension)) + finish) + (unless (sqlplus-get-context-value context :finished) + (setq source-text (concat source-text string)) + (sqlplus-set-context-value context :source-text source-text) + (when last-chunk + (if (string-match (regexp-quote sqlplus-end-of-source-sentinel) source-text) + (when (< (length source-text) (+ (length sqlplus-end-of-source-sentinel) 5)) + (setq last-chunk nil + finish "There is no such database object")) + (setq last-chunk nil))) + (when last-chunk + (setq finish t)) + (when finish + (sqlplus-set-context-value context :finished t) + (if (stringp finish) + (message finish) + (with-temp-buffer + (insert source-text) + (goto-char (point-min)) + (re-search-forward (regexp-quote sqlplus-end-of-source-sentinel) nil t) + (replace-match "") + (goto-char (point-max)) + (forward-comment (- (buffer-size))) + (when (equal source-type "TABLE") + (goto-char (point-min)) + (insert (format "table %s\n(\n" source-name)) + (goto-char (point-max)) + (delete-region (re-search-backward "," nil t) (point-max)) + (insert "\n);")) + (insert "\n/\n") + (unless (member source-type '("SEQUENCE" "TABLE" "SYNONYM" "INDEX")) + (insert "show err\n")) + (goto-char (point-min)) + (insert "create " (if (member source-type '("INDEX" "SEQUENCE" "TABLE")) "" "or replace ")) + (setq source-text (buffer-string))) + (with-current-buffer (get-buffer-create name) + (setq buffer-read-only nil) + (erase-buffer) + (insert source-text) + (goto-char (point-min)) + (set-visited-file-name (concat (file-name-as-directory temporary-file-directory) + (concat (make-temp-name (sqlplus-canonize-file-name (concat (upcase source-name) "_") "[$]")) "." source-extension))) + (rename-buffer name) + (condition-case err + (funcall (symbol-function 'plsql-mode)) + (error nil)) + (setq sqlplus-connect-string connect-string + buffer-read-only sqlplus-source-buffer-readonly-by-default-flag) + (save-buffer) + (save-selected-window + (let ((win (selected-window))) + (when (or (equal win (sqlplus-get-side-window)) + (and (fboundp 'ide-skel-side-view-window-p) + (funcall 'ide-skel-side-view-window-p win))) + (setq win (sqlplus-get-workbench-window))) + (set-window-buffer win (current-buffer)))))))))) + +(defun sqlplus-get-source (connect-string name type &optional schema-name) + "Fetch source for database object NAME in current or specified SCHEMA-NAME, and show the source in new buffer. +Possible TYPE values are in 'sqlplus-object-types'." + (interactive (let* ((thing (thing-at-point 'symbol)) + (obj-raw-name (read-string (concat "Object name" (if thing (concat " [default " thing "]") "") ": ") + nil + 'sqlplus-get-source-history (when thing thing))) + (completion-ignore-case t) + (type (completing-read "Object type: " (mapcar (lambda (type) (cons type nil)) sqlplus-object-types) nil t))) + (string-match "^\\(\\([^.]+\\)[.]\\)?\\(.*\\)$" obj-raw-name) + (list sqlplus-connect-string (match-string 3 obj-raw-name) type (match-string 2 obj-raw-name)))) + (setq type (upcase type)) + (let* ((sql + (cond ((equal type "SEQUENCE") + (format (concat "select 'sequence %s' || sequence_name || " + "decode( increment_by, 1, '', ' increment by ' || increment_by ) || " + "case when increment_by > 0 and max_value >= (1.0000E+27)-1 or increment_by < 0 and max_value = -1 then '' " + "else decode( max_value, null, ' nomaxvalue', ' maxvalue ' || max_value) end || " + "case when increment_by > 0 and min_value = 1 or increment_by < 0 and min_value <= (-1.0000E+26)+1 then '' " + "else decode( min_value, null, ' nominvalue', ' minvalue ' || min_value) end || " + "decode( cycle_flag, 'Y', ' cycle', '' ) || " + "decode( cache_size, 20, '', 0, ' nocache', ' cache ' || cache_size ) || " + "decode( order_flag, 'Y', ' order', '' ) " + "from %s where sequence_name = '%s'%s;") + (if schema-name (concat (upcase schema-name) ".") "") + (if schema-name "all_sequences" "user_sequences") + (upcase name) + (if schema-name (format " and sequence_owner = '%s'" (upcase schema-name)) ""))) + ((equal type "TABLE") + (format (concat "select ' ' || column_name || ' ' || data_type || " + "decode( data_type," + " 'VARCHAR2', '(' || to_char( data_length, 'fm9999' ) || ')'," + " 'NUMBER', decode( data_precision," + " null, ''," + " '(' || to_char( data_precision, 'fm9999' ) || decode( data_scale," + " null, ''," + " 0, ''," + " ',' || data_scale ) || ')' )," + " '') || " + "decode( nullable, 'Y', ' not null', '') || ','" + "from all_tab_columns " + "where owner = %s and table_name = '%s' " + "order by column_id;") + (if schema-name (concat "'" (upcase schema-name) "'") "user") + (upcase name))) + ((equal type "SYNONYM") + (format (concat "select " + "decode( owner, 'PUBLIC', 'public ', '' ) || 'synonym ' || " + "decode( owner, 'PUBLIC', '', user, '', owner || '.' ) || synonym_name || ' for ' || " + "decode( table_owner, user, '', table_owner || '.' ) || table_name || " + "decode( db_link, null, '', '@' || db_link ) " + "from all_synonyms where (owner = 'PUBLIC' or owner = %s) and synonym_name = '%s';") + (if schema-name (concat "'" (upcase schema-name) "'") "user") + (upcase name))) + ((equal type "VIEW") + (if schema-name (format "select 'view %s.' || view_name || ' as ', text from all_views where owner = '%s' and view_name = '%s';" + (upcase schema-name) (upcase schema-name) (upcase name)) + (format "select 'view ' || view_name || ' as ', text from user_views where view_name = '%s';" (upcase name)))) + ((or (equal type "PROCEDURE") + (equal type "FUNCTION")) + (if schema-name (format "select text from all_source where owner = '%s' and name = '%s' and type in ('PROCEDURE', 'FUNCTION') order by line;" + (upcase schema-name) (upcase name)) + (format "select text from user_source where name = '%s' and type in ('PROCEDURE', 'FUNCTION') order by line;" + (upcase name)))) + (t + (if schema-name (format "select text from all_source where owner = '%s' and name = '%s' and type = '%s' order by line;" + (upcase schema-name) (upcase name) (upcase type)) + (format "select text from user_source where name = '%s' and type = '%s' order by line;" + (upcase name) (upcase type)))))) + (prolog-commands (list "set echo off" + "set newpage 0" + "set space 0" + "set pagesize 0" + "set feedback off" + "set long 4000" + "set longchunksize 4000" + "set wrap on" + "set heading off" + "set trimspool on" + "set linesize 4000" + "set timing off")) + (extension (if (equal (downcase type) "package") "pks" "sql")) + (source-buffer-name (concat " " (upcase name) "." extension)) + (context-options (list (cons :dont-parse-result 'dont-parse) + (cons :source-text nil) + (cons :source-type type) + (cons :source-name name) + (cons :source-extension extension) + (cons :result-function 'sqlplus-get-source-function)))) + (sqlplus-execute connect-string sql context-options prolog-commands t t) + (sqlplus-execute connect-string (format "select '%s' from dual;" sqlplus-end-of-source-sentinel) context-options prolog-commands t t))) + +(defun sqlplus-canonize-file-name (file-name regexp) + (while (string-match regexp file-name) + (setq file-name (replace-match "!" nil t file-name))) + file-name) + +(defun sqlplus-define-user-variables (string) + (when string + (let (variables-list + define-commands + (index 0)) + (while (setq index (string-match "&+\\(\\(\\sw\\|\\s_\\)+\\)" string index)) + (let ((var-name (match-string 1 string))) + (setq index (+ 2 index)) + (unless (member var-name variables-list) + (push var-name variables-list)))) + (dolist (var-name (reverse variables-list)) + (let* ((default-value (gethash var-name sqlplus-user-variables nil)) + (value (read-string (format (concat "Variable value for %s" (if default-value (format " [default: %s]" default-value) "") ": ") var-name) + nil 'sqlplus-user-variables-history default-value))) + (unless value + (error "There is no value for %s defined" var-name)) + (setq define-commands (cons (format "define %s=%s" var-name value) define-commands)) + (puthash var-name value sqlplus-user-variables))) + define-commands))) + +(defun sqlplus-parse-region (start end) + (let ((sql (buffer-substring start end))) + (save-excursion + ;; Strip whitespace from beginning and end, just to be neat. + (if (string-match "\\`[ \t\n]+" sql) + (setq sql (substring sql (match-end 0)))) + (if (string-match "[ \t\n]+\\'" sql) + (setq sql (substring sql 0 (match-beginning 0)))) + (setq sql (replace-regexp-in-string "^[ \t]*--.*[\n]?" "" sql)) + (when (zerop (length sql)) + (error "Nothing to send")) + ;; Now the string should end with an sqlplus-terminator. + (if (not (string-match "\\(;\\|/\\|[.]\\)\\'" sql)) + (setq sql (concat sql ";")))) + sql)) + +(defun sqlplus-show-html-fun (context connect-string begin end interrupted) + (let ((output-file (expand-file-name (substitute-in-file-name sqlplus-html-output-file-name))) + (sql (sqlplus-get-context-value context :htmlized-html-command)) + (html (buffer-substring begin end)) + (header-html (eval sqlplus-html-output-header))) + (let ((case-fold-search t)) + (while (and (string-match "\\`[ \t\n]*\\(
\\|

\\)?" html) (match-string 0 html) (> (length (match-string 0 html)) 0)) + (setq html (replace-match "" nil t html))) + (when (> (length html) 0) + (sqlplus-execute connect-string "" nil '("set markup html off") 'no-echo 'dont-show-output-buffer) + (find-file output-file) + (erase-buffer) + (insert (concat "\n" + "\n" + " \n" + (sqlplus-get-context-value context :head) "\n" + "\n" + "\n" + (if header-html header-html "") + (if sqlplus-html-output-sql sql "") + "

" + html "\n" + "\n" + "")) + (goto-char (point-min)) + (save-buffer))))) + +(defun sqlplus-refine-html (html remove-entities) + (string-match "\\`\"?\\(\\(.\\|\n\\)*?\\)\"?[ \t\n]*\\'" html) + (setq html (match-string 1 html)) + (if remove-entities + (progn + (while (string-match """ html) (setq html (replace-match "\"" nil t html))) + (while (string-match "<" html) (setq html (replace-match "<" nil t html))) + (while (string-match ">" html) (setq html (replace-match ">" nil t html))) + (while (string-match "&" html) (setq html (replace-match "&" nil t html)))) + (while (string-match "&" html) (setq html (replace-match "&" nil t html))) + (while (string-match ">" html) (setq html (replace-match ">" nil t html))) + (while (string-match "<" html) (setq html (replace-match "<" nil t html))) + (while (string-match "\"" html) (setq html (replace-match """ nil t html)))) + (string-match "\\`\"?\\(\\(.\\|\n\\)*?\\)\"?[ \t\n]*\\'" html) + (setq html (match-string 1 html)) + html) + +(defun sqlplus-show-markup-fun (context connect-string begin end interrupted) + (goto-char begin) + (let ((head "") + (body "") + preformat) + (when (re-search-forward (concat "\\bHEAD\\b[ \t\n]*\\(\\(.\\|\n\\)*\\)[ \t\n]*" + "\\bBODY\\b[ \t\n]*\\(\\(.\\|\n\\)*\\)[ \t\n]*" + "\\bTABLE\\b\\(.\\|\n\\)*PREFORMAT[ \t\n]+\\(ON\\|OFF\\)\\b") nil t) + (setq head (match-string 1) + body (match-string 3) + preformat (string= (downcase (match-string 6)) "on")) + (setq head (sqlplus-refine-html head t) + body (sqlplus-refine-html body t)) + (let ((context-options (list (cons :result-function 'sqlplus-show-html-fun) + (cons :current-command-input-buffer-name (sqlplus-get-context-value context :current-command-input-buffer-name)) + (cons :html-command (sqlplus-get-context-value context :html-command)) + (cons :htmlized-html-command (sqlplus-get-context-value context :htmlized-html-command)) + (cons :head head) + (cons :body body))) + (prolog-commands (list "set wrap on" + (format "set linesize %S" (if preformat (1- (frame-width)) 4000)) + "set pagesize 50000" + "btitle off" + "repfooter off" + "set markup html on"))) + (sqlplus-execute connect-string (sqlplus-get-context-value context :html-command) context-options prolog-commands 'no-echo 'dont-show-output-buffer))))) + +(defun sqlplus-htmlize (begin end) + (let (result) + (when (featurep 'htmlize) + (let* ((htmlize-output-type 'font) + (buffer (funcall (symbol-function 'htmlize-region) begin end))) + (with-current-buffer buffer + (goto-char 1) + (re-search-forward "

[ \t\n]*\\(\\(.\\|\n\\)*?\\)[ \t\n]*
" nil t) + (setq result (concat "
" (match-string 1) "
"))) + (kill-buffer buffer))) + (unless result + (setq result (sqlplus-refine-html (buffer-substring begin end) nil))) + result)) + +(defun sqlplus--send (connect-string sql &optional arg no-echo html start end) + (if html + (let* ((context-options (list (cons :result-function 'sqlplus-show-markup-fun) + (cons :current-command-input-buffer-name (buffer-name)) + (cons :html-command sql) + (cons :htmlized-html-command (if (and (eq sqlplus-html-output-sql 'elegant) (featurep 'htmlize)) + (sqlplus-htmlize start end) + (sqlplus-refine-html sql nil)))))) + (sqlplus-execute connect-string "show markup\n" context-options nil 'no-echo 'dont-show-output-buffer)) + (let* ((no-parse (consp arg)) + (context-options (list (cons :dont-parse-result (consp arg)) + (cons :columns-count (if (integerp arg) + (if (zerop arg) nil arg) + (if sqlplus-multi-output-tables-default-flag nil 1))) + (cons :current-command-input-buffer-name (buffer-name)))) + (prolog-commands (list (format "set wrap %s" (if no-parse "on" sqlplus-default-wrap)) + (format "set linesize %s" (if (consp arg) (1- (frame-width)) 4000)) + (format "set pagesize %S" (if no-parse 50000 sqlplus-pagesize)) + (format "btitle %s" + (if no-parse "off" (concat "left '" sqlplus-page-separator "'"))) + (format "repfooter %s" + (if no-parse "off" (concat "left '" sqlplus-repfooter "'")))))) + (sqlplus-execute connect-string sql context-options prolog-commands no-echo)))) + +(defun sqlplus-explain () + (interactive) + (sqlplus-check-connection) + (when (buffer-file-name) + (condition-case err + (save-buffer) + (error (message (error-message-string err))))) + (let* ((region (sqlplus-mark-current))) + (setq sqlplus-region-beginning-pos (car region) + sqlplus-region-end-pos (cdr region)) + (if (and sqlplus-region-beginning-pos sqlplus-region-end-pos) + (let ((sql (sqlplus-parse-region (car region) (cdr region))) + (case-fold-search t)) + (if (string-match "^[\n\t ]*explain[\n\t ]+plan[\t\t ]+for\\>" sql) + (sqlplus--send sqlplus-connect-string sql nil nil nil) + (setq sql (concat (sqlplus-fontify-string sqlplus-connect-string "explain plan for ") sql)) + (sqlplus--send sqlplus-connect-string sql nil nil nil))) + (error "Point doesn't indicate any command to execute")))) + +(defun sqlplus-send-region (arg start end &optional no-echo html) + "Send a region to the SQL*Plus process." + (interactive "P\nr") + (sqlplus-check-connection) + (sqlplus--send sqlplus-connect-string (sqlplus-parse-region start end) arg no-echo html start end)) + +(defun sqlplus-user-command (connect-string sql result-proc) + (let* ((context-options (list (cons :user-function result-proc) + (cons :columns-count 1))) + (prolog-commands (list (format "set wrap %s" sqlplus-default-wrap) + "set linesize 4000" + "set timing off" + "set pagesize 50000" + "btitle off" + (format "repfooter %s" (concat "left '" sqlplus-repfooter "'"))))) + (sqlplus-execute connect-string sql context-options prolog-commands 'no-echo 'dont-show-output-buffer))) + + +(defun sqlplus-hidden-select (connect-string sql result-proc) + (let* ((context-options (list (cons :result-table-function result-proc) + (cons :columns-count 1))) + (prolog-commands (list (format "set wrap %s" sqlplus-default-wrap) + "set linesize 4000" + "set pagesize 50000" + "btitle off" + (format "repfooter %s" (concat "left '" sqlplus-repfooter "'"))))) + (sqlplus-execute connect-string sql context-options prolog-commands 'no-echo 'dont-show-output-buffer))) + +;; "appi[nfo]" -> '("appinfo" "appi") +(defun sqlplus-full-forms (name) + (if (string-match "\\`\\([^[]*\\)?\\[\\([^]]+\\)\\]\\([^]]*\\)?\\'" name) + (list (replace-match "\\1\\2\\3" t nil name) + (replace-match "\\1\\3" t nil name)) + (list name))) + +(defun sqlplus-get-canonical-command-name (name) + (let ((association (assoc (downcase name) sqlplus-system-variables))) + (if association (cdr association) name))) + + +(defun sqlplus-execute (connect-string sql context-options prolog-commands &optional no-echo dont-show-output-buffer) + (sqlplus-verify-buffer connect-string) + (let* ((process-buffer-name (sqlplus-get-process-buffer-name connect-string)) + (process-buffer (get-buffer process-buffer-name)) + (output-buffer-name (sqlplus-get-output-buffer-name connect-string)) + (echo-prolog (concat "\n" sqlplus-output-separator " " (current-time-string) "\n\n")) + (process (get-buffer-process process-buffer-name)) + set-prolog-commands commands command-no + (history-buffer (sqlplus-get-history-buffer connect-string)) + (defines (sqlplus-define-user-variables sql))) + (setq prolog-commands (append (sqlplus-initial-strings) prolog-commands)) + (when process-buffer + (with-current-buffer process-buffer + (setq command-no sqlplus-command-seq) + (incf sqlplus-command-seq) + (setq context-options (append (list (cons :id command-no) (cons :sql sql)) (copy-list context-options))) + (setq sqlplus-command-contexts (reverse (cons context-options (reverse sqlplus-command-contexts)))))) + ;; move all "set" commands from prolog-commands to set-prolog-commands + (setq prolog-commands (delq nil (mapcar (lambda (command) (if (string-match "^\\s-*[sS][eE][tT]\\s-+" command) + (progn + (setq set-prolog-commands + (append set-prolog-commands + (list (substring command (length (match-string 0 command)))))) + nil) + command)) + prolog-commands))) + ;; remove duplicates commands from prolog-commands (last entries win) + (let (spc-alist) + (dolist (command prolog-commands) + (let* ((name (progn (string-match "^\\S-+" command) (downcase (match-string 0 command)))) + (association (assoc name spc-alist))) + (if (and association (not (equal name "define"))) + (setcdr association command) + (setq spc-alist (cons (cons name command) spc-alist))))) + (setq prolog-commands (mapcar (lambda (pair) (cdr pair)) (reverse spc-alist)))) + + (setq prolog-commands (append prolog-commands defines)) + (setq set-prolog-commands (append (list (format "sqlprompt '%s%S%s'" sqlplus-prompt-prefix command-no sqlplus-prompt-suffix)) set-prolog-commands)) + + ;; remove duplicates from set-prolog-commands (last entries win) + (let (spc-alist) + (dolist (set-command set-prolog-commands) + (let* ((name (progn (string-match "^\\S-+" set-command) (downcase (sqlplus-get-canonical-command-name (match-string 0 set-command))))) + (association (assoc name spc-alist))) + (if association + (setcdr association set-command) + (setq spc-alist (cons (cons name set-command) spc-alist))))) + (setq set-prolog-commands (mapcar (lambda (pair) (cdr pair)) (reverse spc-alist)))) + + (setq commands (concat (mapconcat 'identity (append + (list (concat "set " (mapconcat 'identity set-prolog-commands " "))) + prolog-commands + (list sql)) "\n") + "\n")) + (when history-buffer + (with-current-buffer history-buffer + (goto-char (point-max)) + (insert echo-prolog) + (insert (concat commands "\n")))) + (let ((saved-window (cons (selected-window) (window-buffer (selected-window)))) + (input-buffer (get-buffer (sqlplus-get-input-buffer-name connect-string)))) + (unless no-echo + (sqlplus-echo-in-buffer output-buffer-name echo-prolog) + (let ((old-suppress-show-output-buffer sqlplus-suppress-show-output-buffer)) + (unwind-protect + (save-selected-window + (setq sqlplus-suppress-show-output-buffer dont-show-output-buffer) + (when (and output-buffer-name + (get-buffer output-buffer-name)) + (with-current-buffer (get-buffer output-buffer-name) + (sqlplus-buffer-bottom connect-string) + (sqlplus-buffer-mark-current connect-string)))) + (setq sqlplus-suppress-show-output-buffer old-suppress-show-output-buffer))) + (sqlplus-echo-in-buffer output-buffer-name (concat sql "\n\n") nil t) + (save-selected-window + (unless dont-show-output-buffer + (when (and output-buffer-name + (get-buffer output-buffer-name)) + (with-current-buffer (get-buffer output-buffer-name) + (sqlplus-buffer-redisplay-current connect-string)))))) + (if (window-live-p (car saved-window)) + (select-window (car saved-window)) + (if (get-buffer-window (cdr saved-window)) + (select-window (get-buffer-window (cdr saved-window))) + (when (and input-buffer + (get-buffer-window input-buffer)) + (select-window (get-buffer-window input-buffer)))))) + (send-string process commands))) + +(defun sqlplus-fontify-string (connect-string string) + (let* ((input-buffer-name (sqlplus-get-input-buffer-name connect-string)) + (input-buffer (when input-buffer-name (get-buffer input-buffer-name))) + (result string)) + (when (and input-buffer (buffer-live-p input-buffer)) + (with-current-buffer input-buffer + (save-excursion + (goto-char (point-max)) + (let ((pos (point))) + (insert "\n\n") + (insert string) + (font-lock-fontify-block (+ (count "\n" string) 2)) + (setq result (buffer-substring (+ pos 2) (point-max))) + (delete-region pos (point-max)))))) + result)) + +(defvar plsql-mark-backward-list nil) + +(unless plsql-mode-map + (setq plsql-mode-map (copy-keymap sql-mode-map)) + (define-key plsql-mode-map "\M-." 'sqlplus-file-get-source) + (define-key plsql-mode-map [C-down-mouse-1] 'sqlplus-mouse-select-identifier) + (define-key plsql-mode-map [C-mouse-1] 'sqlplus-file-get-source-mouse) + (define-key plsql-mode-map "\C-c\C-g" 'plsql-begin) + (define-key plsql-mode-map "\C-c\C-q" 'plsql-loop) + (define-key plsql-mode-map "\C-c\C-z" 'plsql-if) + (define-key plsql-mode-map "\C-c\C-c" 'plsql-compile) + (define-key plsql-mode-map [tool-bar plsql-prev-mark] + (list 'menu-item "Previous mark" 'plsql-prev-mark + :image plsql-prev-mark-image + :enable 'plsql-mark-backward-list))) + +(defvar plsql-continue-anyway nil + "Local in input buffer (plsql-mode).") +(make-variable-buffer-local 'plsql-continue-anyway) + +(defun sqlplus-switch-to-buffer (buffer-or-path &optional line-no) + (if (fboundp 'ide-skel-select-buffer) + (funcall 'ide-skel-select-buffer buffer-or-path line-no) + (let ((buffer (or (and (bufferp buffer-or-path) buffer-or-path) + (find-file-noselect buffer-or-path)))) + (switch-to-buffer buffer) + (goto-line line-no)))) + +(defun plsql-prev-mark () + (interactive) + (let (finish) + (while (and plsql-mark-backward-list + (not finish)) + (let* ((marker (pop plsql-mark-backward-list)) + (buffer (marker-buffer marker)) + (point (marker-position marker))) + (set-marker marker nil) + (when (and buffer + (or (not (eq (current-buffer) buffer)) + (not (eql (point) point)))) + (sqlplus-switch-to-buffer buffer) + (goto-char point) + (setq finish t)))) + ;; (message "BACK: %S -- FORWARD: %S" plsql-mark-backward-list plsql-mark-forward-list) + (force-mode-line-update) + (sit-for 0))) + +(defun sqlplus-mouse-select-identifier (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (save-excursion + (let* ((point (posn-point (event-start event))) + (identifier (progn (goto-char point) (thing-at-point 'symbol))) + (ident-regexp (when identifier (regexp-quote identifier)))) + (push (point-marker) plsql-mark-backward-list) + (when ident-regexp + (save-excursion + (while (not (looking-at ident-regexp)) + (backward-char)) + (sqlplus-mouse-set-selection (current-buffer) (point) (+ (point) (length identifier)) 'highlight))))))) + +(defun sqlplus-file-get-source-mouse (event) + (interactive "@e") + (let (ident) + (with-selected-window (posn-window (event-start event)) + (save-excursion + (goto-char (posn-point (event-start event))) + (setq ident (thing-at-point 'symbol)))) + (sqlplus-file-get-source sqlplus-connect-string ident nil) + (sit-for 0))) + +(defun plsql-compile (&optional arg) + "Save buffer and send its content to SQL*Plus. +You must enter connect-string if buffer is disconnected; with +argument you can change connect-string even for connected +buffer." + (interactive "P") + (let (aborted + exists-show-error-command + (case-fold-search t)) + (save-window-excursion + (save-excursion + ;; ask for "/" and "show err" if absent + (let ((old-point (point)) + show-err-needed + exists-run-command best-point finish) + (goto-char (point-min)) + (setq show-err-needed (let ((case-fold-search t)) + (re-search-forward "create\\([ \t\n]+or[ \t\n]+replace\\)?[ \t\n]+\\(package\\|procedure\\|function\\|trigger\\|view\\|type\\)" nil t))) + (goto-char (point-max)) + (forward-comment (- (buffer-size))) + (re-search-backward "^\\s-*show\\s-+err" nil t) + (forward-comment (- (buffer-size))) + (condition-case nil (forward-char) (error nil)) + (setq best-point (point)) + (goto-char (point-min)) + (setq exists-run-command (re-search-forward "^\\s-*/[^*]" nil t)) + (goto-char (point-min)) + (setq exists-show-error-command (or (not show-err-needed) (re-search-forward "^\\s-*show\\s-+err" nil t))) + (while (and (not plsql-continue-anyway) (or (not exists-run-command) (not exists-show-error-command)) (not finish)) + (goto-char best-point) + (let ((c (read-char + (format "Cannot find %s. (I)nsert it at point, (A)bort, (C)ontinue anyway" + (concat (unless exists-run-command "\"/\"") + (unless (or exists-run-command exists-show-error-command) " and ") + (unless exists-show-error-command "\"show err\"")))))) + (cond ((memq c '(?i ?I)) + (unless exists-run-command (insert "/\n")) + (unless exists-show-error-command (insert "show err\n")) + (setq finish t)) + ((memq c '(?a ?A)) + (setq aborted t + finish t)) + ((memq c '(?c ?C)) + (setq plsql-continue-anyway t) + (setq finish t)))))))) + (unless aborted + (save-buffer) + (let* ((buffer (current-buffer)) + (input-buffer-name (buffer-name)) + (file-path (sqlplus-file-truename (buffer-file-name))) + (compilation-buffer (get-buffer sqlplus-plsql-compilation-results-buffer-name)) + (context-options (list (cons :last-compiled-file-path file-path) + (cons :current-command-input-buffer-name input-buffer-name) + (cons :compilation-expected exists-show-error-command))) + (prolog-commands (list (format "set wrap %s" sqlplus-default-wrap) + "set linesize 4000" + (format "set pagesize %S" sqlplus-pagesize) + (format "btitle %s" (concat "left '" sqlplus-page-separator "'")) + (format "repfooter %s" (concat "left '" sqlplus-repfooter "'"))))) + (when (or (not sqlplus-connect-string) + arg) + (setq sqlplus-connect-string (car (sqlplus-read-connect-string nil (caar (sqlplus-divide-connect-strings)))))) + (sqlplus sqlplus-connect-string nil (when plsql-auto-parse-errors-flag 'dont-show-output-buffer)) + (set-buffer buffer) + (force-mode-line-update) + (when font-lock-mode (font-lock-mode 1)) + (when compilation-buffer + (with-current-buffer compilation-buffer + (let ((inhibit-read-only t)) + (erase-buffer)))) + (setq prolog-commands (append prolog-commands (sqlplus-define-user-variables (buffer-string)))) + (sqlplus-execute sqlplus-connect-string (concat "@" file-path) context-options prolog-commands nil exists-show-error-command))))) + +(defun plsql-parse-errors (last-compiled-file-path) + (let ((file-name (file-name-nondirectory last-compiled-file-path)) + error-list) + (put-text-property 0 (length file-name) 'face 'font-lock-warning-face file-name) + (save-excursion + (when (re-search-forward "^LINE/COL\\>" nil t) + (beginning-of-line 3) + (while (re-search-forward "^\\([0-9]+\\)/\\([0-9]+\\)\\s-*\\(\\(.\\|\n\\)*?\\)[\r\t ]*\n\\([\r\t ]*\\(\n\\|\\'\\)\\|[0-9]+\\)" nil t) + (let ((line-no (match-string 1)) + (column-no (match-string 2)) + (errmsg (match-string 3)) + label) + (goto-char (match-beginning 5)) + (while (string-match "\\s-\\s-+" errmsg) + (setq errmsg (replace-match " " nil t errmsg))) + (put-text-property 0 (length line-no) 'face 'font-lock-variable-name-face line-no) + (put-text-property 0 (length column-no) 'face 'font-lock-variable-name-face column-no) + (setq label (concat file-name ":" line-no ":" column-no ": " errmsg)) + (put-text-property 0 (length label) 'mouse-face 'highlight label) + (push label error-list))))) + (save-excursion + (while (re-search-forward "\\s-\\([0-9]+\\):\n\\(ORA-[0-9]+[^\n]*\\)\n" nil t) + (let ((line-no (match-string 1)) + (errmsg (match-string 2)) + label) + (put-text-property 0 (length line-no) 'face 'font-lock-variable-name-face line-no) + (setq label (concat file-name ":" line-no ": " errmsg)) + (put-text-property 0 (length label) 'mouse-face 'highlight label) + (push label error-list)))) + (save-excursion + (while (re-search-forward "\\(\\(SP2\\|CPY\\)-[0-9]+:[^\n]*\\)\n" nil t) + (let ((errmsg (match-string 1)) + label) + (setq label (concat file-name ":" errmsg)) + (put-text-property 0 (length label) 'mouse-face 'highlight label) + (push label error-list)))) + error-list)) + +(defun plsql-display-errors (dir error-list) + (let ((buffer (get-buffer-create sqlplus-plsql-compilation-results-buffer-name))) + (save-selected-window + (save-excursion + (set-buffer buffer) + (let ((inhibit-read-only t)) + (erase-buffer) + (setq default-directory dir) + (insert (format "cd %s\n" default-directory)) + (insert (format "Compilation results\n")) + (compilation-minor-mode 1) + (dolist (msg (reverse error-list)) + (insert msg) + (insert "\n")) + (insert (format "\n(%s errors)\n" (length error-list)))) + (when (and error-list (fboundp 'compile-reinitialize-errors) (funcall (symbol-function 'compile-reinitialize-errors) t))) + (switch-to-buffer-other-window buffer) + (goto-line 1) + (goto-line 3))))) + + +(defun sqlplus-file-truename (file-name) + (if file-name + (file-truename file-name) + file-name)) + +(defun sqlplus--hidden-buffer-name-p (buffer-name) + (equal (elt buffer-name 0) 32)) + +(defun sqlplus-get-workbench-window () + "Return upper left window" + (if (fboundp 'ide-get-workbench-window) + (funcall (symbol-function 'ide-get-workbench-window)) + (let (best-window) + (dolist (win (copy-list (window-list nil 1))) + (when (not (sqlplus--hidden-buffer-name-p (buffer-name (window-buffer win)))) + (if (null best-window) + (setq best-window win) + (let* ((best-window-coords (window-edges best-window)) + (win-coords (window-edges win))) + (when (or (< (cadr win-coords) (cadr best-window-coords)) + (and (= (cadr win-coords) (cadr best-window-coords)) + (< (car win-coords) (car best-window-coords)))) + (setq best-window win)))))) + ;; (message "BEST-WINDOW: %S" best-window) + best-window))) + +(defun sqlplus-get-side-window () + "Return bottom helper window, or nil if not found" + (if (fboundp 'ide-get-side-window) + (funcall (symbol-function 'ide-get-side-window)) + (let* ((workbench-window (sqlplus-get-workbench-window)) + best-window) + (dolist (win (copy-list (window-list nil 1))) + (when (and (not (sqlplus--hidden-buffer-name-p (buffer-name (window-buffer win)))) + (not (eq win workbench-window))) + (if (null best-window) + (setq best-window win) + (when (> (cadr (window-edges win)) (cadr (window-edges best-window))) + (setq best-window win))))) + best-window))) + +(defvar sqlplus--idle-tasks nil) + +(defun sqlplus--enqueue-task (fun &rest params) + (setq sqlplus--idle-tasks (reverse (cons (cons fun params) (reverse sqlplus--idle-tasks))))) + +(defun sqlplus--execute-tasks () + (dolist (task sqlplus--idle-tasks) + (let ((fun (car task)) + (params (cdr task))) + (condition-case var + (apply fun params) + (error (message (error-message-string var)))))) + (setq sqlplus--idle-tasks nil)) + +(add-hook 'post-command-hook 'sqlplus--execute-tasks) + +(defvar sqlplus-mouse-selection nil) + +(defun sqlplus-mouse-set-selection (buffer begin end mouse-face) + (interactive "@e") + (let ((old-buffer-modified-p (buffer-modified-p))) + (when (buffer-live-p buffer) + (with-current-buffer buffer + (unwind-protect + (put-text-property begin end 'mouse-face mouse-face) + (set-buffer-modified-p old-buffer-modified-p) + (setq sqlplus-mouse-selection (when mouse-face (list buffer begin end)))))))) + +(defun sqlplus-clear-mouse-selection () + (when (and sqlplus-mouse-selection + (eq (event-basic-type last-input-event) 'mouse-1) + (not (memq 'down (event-modifiers last-input-event)))) + (sqlplus-mouse-set-selection (car sqlplus-mouse-selection) (cadr sqlplus-mouse-selection) (caddr sqlplus-mouse-selection) nil))) + +(add-hook 'plsql-mode-hook + (lambda () + (modify-syntax-entry ?. "." sql-mode-syntax-table) + (setq sqlplus-font-lock-keywords-1 (sqlplus-set-font-lock-emacs-structures-for-level 1 major-mode)) + (setq sqlplus-font-lock-keywords-2 (sqlplus-set-font-lock-emacs-structures-for-level 2 major-mode)) + (setq sqlplus-font-lock-keywords-3 (sqlplus-set-font-lock-emacs-structures-for-level 3 major-mode)) + (setq font-lock-defaults '((sqlplus-font-lock-keywords-1 sqlplus-font-lock-keywords-2 sqlplus-font-lock-keywords-3) + nil t ((?_ . "w") (?$ . "w") (?# . "w") (?& . "w")))) + (orcl-mode 1) + (use-local-map plsql-mode-map) ; std + (add-hook 'post-command-hook 'sqlplus-clear-mouse-selection nil t))) + +(setq recentf-exclude (cons (concat "^" (regexp-quote (file-name-as-directory temporary-file-directory))) + (when (boundp 'recentf-exclude) + recentf-exclude))) + +(when (fboundp 'ide-register-persistent-var) + (funcall (symbol-function 'ide-register-persistent-var) 'sqlplus-connect-strings-alist + ;; save proc + (lambda (alist) + (mapcar (lambda (pair) + (if sqlplus-save-passwords + pair + (cons (car pair) nil))) + alist)) + ;; load proc + (lambda (alist) + (setq sqlplus-connect-string-history (mapcar (lambda (pair) (car pair)) alist)) + alist))) + +(defun get-all-dirs (root-dir) + (let ((list-to-see (list root-dir)) + result-list) + (while list-to-see + (let* ((dir (pop list-to-see)) + (children (directory-files dir t))) + (push dir result-list) + (dolist (child children) + (when (and (not (string-match "^[.]+"(file-name-nondirectory child))) + (file-directory-p child)) + (push child list-to-see))))) + result-list)) + +(defun sqlplus-command-line () + (interactive) + (if (comint-check-proc "*SQL*") + (pop-to-buffer "*SQL*") + (let* ((pair (sqlplus-read-connect-string nil (when sqlplus-connect-string (car (refine-connect-string sqlplus-connect-string))))) + (qualified-cs (car pair)) + (refined-cs (cadr pair)) + (password (cdr (refine-connect-string qualified-cs)))) + (if (string-match "^\\([^@]*\\)@\\(.*\\)$" refined-cs) + (let ((old-sql-get-login-fun (symbol-function 'sql-get-login))) + (setq sql-user (match-string 1 refined-cs) + sql-password password + sql-database (match-string 2 refined-cs)) + (unwind-protect + (progn + (fset 'sql-get-login (lambda (&rest whatever) nil)) + (sql-oracle)) + (fset 'sql-get-login old-sql-get-login-fun))) + (error "Connect string must be in form login@sid"))))) + +(defun sqlplus-find-tnsnames () + (interactive) + (let* ((ora-home-dir (or (getenv "ORACLE_HOME") (error "Environment variable ORACLE_HOME not set"))) + found + (list-to-see (list ora-home-dir))) + (while (and (not found) list-to-see) + (let* ((dir (pop list-to-see)) + (children (condition-case nil (directory-files dir t) (error nil)))) + (dolist (child children) + (unless found + (if (string-match "admin.tnsnames\.ora$" child) + (progn + (setq found t) + (find-file child)) + (if (and (not (string-match "^[.]+" (file-name-nondirectory child))) + (file-directory-p child)) + (push child list-to-see))))))) + (unless found + (message "File tnsnames.ora not found")))) + +(defun sqlplus-remove-help-echo (list) + "Remove all HELP-ECHO properties from mode-line format value" + (when (listp list) + (if (eq (car list) :propertize) + (while list + (when (eq (cadr list) 'help-echo) + (setcdr list (cdddr list))) + (setq list (cdr list))) + (dolist (elem list) (sqlplus-remove-help-echo elem))))) + +(when (>= emacs-major-version 22) + (sqlplus-remove-help-echo mode-line-modes)) + +(defun sqlplus-get-project-root-dir (path) + (let ((path (file-truename (substitute-in-file-name path))) + dir) + (if (file-directory-p path) + (progn + (setq path (file-name-as-directory path)) + (setq dir path)) + (setq dir (file-name-as-directory (file-name-directory path)))) + (let ((last-project-dir dir) + (dir-list (split-string dir "/")) + is-project) + (while (directory-files dir t (concat "^" "\\(\\.svn\\|CVS\\)$") t) + (setq is-project t + last-project-dir (file-name-as-directory dir) + dir (file-name-as-directory (file-name-directory (directory-file-name dir))))) + (when is-project + (let ((list (nthcdr (1- (length (split-string last-project-dir "/"))) dir-list))) + (cond ((equal (car list) "trunk") + (setq last-project-dir (concat last-project-dir "trunk/"))) + ((member (car list) '("branches" "tags")) + (setq last-project-dir (concat last-project-dir (car list) "/" (when (cdr list) (concat (cadr list) "/"))))) + (t))) + (setq dir last-project-dir))) + dir)) + +(defvar sqlplus-search-buffer-name "*search*") + +(defvar sqlplus-object-types-regexps + '( + ("TABLE" . "\\bcreate\\s+table\\s+[^(]*?\\b#\\b") + ("VIEW" . "\\bview\\s+.*?\\b#\\b") + ("INDEX" . "\\b(constraint|index)\\s+.*?\\b#\\b") + ("TRIGGER" . "\\btrigger\\s+.*?\\b#\\b") + ("SEQUENCE" . "\\bsequence\\s+.*?\\b#\\b") + ("SYNONYM" . "\\bsynonym\\s+.*?\\b#\\b") + ("SCHEMA" . "\\bcreate\\b.*?\\buser\\b.*?\\b#\\b") + ("PROCEDURE" . "\\b(procedure|function)\\b[^(]*?\\b#\\b") + ("PACKAGE" . "\\bpackage\\s+.*?\\b#\\b"))) + +(defvar sqlplus-root-dir-history nil) + +(defvar sqlplus-compare-report-buffer-name "*Comparation Report*") + +(defun sqlplus-compare-schema-to-filesystem (&optional arg) + (interactive "P") + (let* ((connect-string sqlplus-connect-string) + (objects-alist (sqlplus-get-objects-alist sqlplus-connect-string)) + (report-buffer (get-buffer-create sqlplus-compare-report-buffer-name)) + (types-length (- (length objects-alist) 2)) + (root-dir (or (sqlplus-get-root-dir connect-string) + (sqlplus-set-project-for-connect-string connect-string) + (error "Root dir not set"))) + (counter 0)) + (unless objects-alist + (error "Not ready yet - try again later")) + (save-excursion + (switch-to-buffer-other-window report-buffer)) + (with-current-buffer report-buffer + (let ((inhibit-read-only t)) + (erase-buffer) + (insert (format "%s %s vs. %s\n\n" (current-time-string) (car (refine-connect-string connect-string)) root-dir)) + (sit-for 0))) + (dolist (pair objects-alist) + (let ((type (upcase (format "%s" (car pair)))) + (names (cdr pair))) + (unless (member type '("SCHEMA" "COLUMN")) + (incf counter) + (message (format "%s (%d/%d)..." type counter types-length)) + (dolist (name-pair names) + (let* ((name (car name-pair)) + (grep-result (sqlplus-file-get-source sqlplus-connect-string name type 'batch-mode))) + (with-current-buffer report-buffer + (let ((inhibit-read-only t)) + (goto-char (point-max)) + (cond ((eql (length grep-result) 0) + (insert (format "%s %s: not found\n" type name)) + (sit-for 0)) + ((and arg + (> (length grep-result) 1)) + (insert (format "%s %s:\n" type name)) + (dolist (list grep-result) + (insert (format " %s:%d %s\n" (car list) (cadr list) (caddr list)))) + (sit-for 0)) + (t))))))))) + (message "Done.") + (with-current-buffer report-buffer + (goto-char (point-min))))) + +(defun sqlplus-proj-find-files (dir file-predicate &optional dir-predicate) + (setq dir (file-name-as-directory (file-truename (substitute-in-file-name dir)))) + (let (result-list) + (mapcar (lambda (path) + (if (file-directory-p path) + (when (and (file-accessible-directory-p path) + (or (null dir-predicate) + (funcall dir-predicate path))) + (setq result-list (append result-list (sqlplus-proj-find-files path file-predicate dir-predicate)))) + (when (or (null file-predicate) + (funcall file-predicate path)) + (push path result-list)))) + (delete (concat (file-name-as-directory dir) ".") + (delete (concat (file-name-as-directory dir) "..") + (directory-files dir t nil t)))) + result-list)) + +(defvar sqlplus-proj-ignored-extensions '("semantic.cache")) + +(defun sqlplus-mode-file-regexp-list (mode-symbol-list) + (delq nil (mapcar (lambda (element) + (let ((fun-name (if (listp (cdr element)) (cadr element) (cdr element)))) + (when (memq fun-name mode-symbol-list) (cons (car element) fun-name)))) + auto-mode-alist))) + +(defun sqlplus-find-project-files (root-dir mode-symbol-list predicate) + (let ((obj-file-regexp-list (delq nil (mapcar (lambda (element) + (let ((len (length element))) + (unless (and (> len 0) + (equal (elt element (1- len)) ?/)) + (concat (regexp-quote element) "$")))) + (append sqlplus-proj-ignored-extensions completion-ignored-extensions)))) + (mode-file-regexp-list (sqlplus-mode-file-regexp-list mode-symbol-list))) ; (file-path-regexp . major-mode-function-symbol) + (when (and mode-symbol-list + (not mode-file-regexp-list)) + (error (format "No rules for %s major modes in auto-mode-alist." (mapconcat 'identity mode-symbol-list ", ")))) + (sqlplus-proj-find-files root-dir + (lambda (file-name) + (and (not (string-match "#" file-name)) + (not (string-match "semantic.cache" file-name)) + (or (and (not mode-symbol-list) + (not (some (lambda (regexp) + (string-match regexp file-name)) + obj-file-regexp-list))) + (and mode-symbol-list + (some (lambda (element) + (let ((freg (if (string-match "[$]" (car element)) + (car element) + (concat (car element) "$")))) + (when (string-match freg file-name) + (cdr element)))) + mode-file-regexp-list))) + (or (not predicate) + (funcall predicate file-name)))) + (lambda (dir-path) + (not (string-match "/\\(\\.svn\\|CVS\\)$" dir-path)))))) + + +(defun sqlplus-file-get-source (connect-string object-name object-type &optional batch-mode) + (interactive + (progn + (push (point-marker) plsql-mark-backward-list) + (list sqlplus-connect-string (thing-at-point 'symbol) nil))) + (unless object-name + (error "Nothing to search")) + (let* ((root-dir (or (and (not object-type) + (eq major-mode 'plsql-mode) + (buffer-file-name) + (sqlplus-get-project-root-dir (buffer-file-name))) + (sqlplus-get-root-dir connect-string) + (sqlplus-set-project-for-connect-string connect-string) + (error "Root dir not set"))) + (mode-symbol-list '(plsql-mode sql-mode)) + (files-to-grep (sqlplus-find-project-files root-dir mode-symbol-list nil)) + (temp-file-path (concat (file-name-as-directory temporary-file-directory) (make-temp-name "ide-"))) + (search-buffer (get-buffer sqlplus-search-buffer-name)) + (regexp (let ((index 0) + (len (length object-name)) + result) + (setq result + (if object-type + (let ((type (cond ((equal object-type "FUNCTION") "PROCEDURE") + ((equal object-type "PACKAGE BODY") "PACKAGE") + (t object-type)))) + (cdr (assoc type sqlplus-object-types-regexps))) + (mapconcat 'cdr sqlplus-object-types-regexps "|"))) + (unless result + (error "Not implemented")) + (while (and (< index (length result)) + (string-match "#" result index)) + (setq index (+ (match-beginning 0) len)) + (setq result (replace-match object-name t t result))) + (setq index 0) + (while (and (< index (length result)) + (string-match "[$]\\(\\\\b\\)?" result index)) + (setq index (+ (match-end 0) 1)) + (setq result (replace-match "\\$" t t result))) + result)) + grep-command + grep-result) + (when search-buffer + (with-current-buffer search-buffer + (let ((inhibit-read-only t)) + (erase-buffer)))) + ;; (message "Object type: %S, object name: %S, regexp: %S" object-type object-name regexp) + (with-temp-file temp-file-path + (dolist (path files-to-grep) + (insert (concat "'" path "'\n")))) + (let* ((grep-command (format "cat %s | xargs grep -nHiE -e '%s'" temp-file-path regexp)) + (raw-grep-result (split-string (shell-command-to-string grep-command) "\n" t)) + (grep-result (delq nil (mapcar (lambda (line) + (string-match "^\\(.*?\\):\\([0-9]+\\):\\(.*\\)$" line) + (let* ((path (match-string 1 line)) + (line-no (string-to-number (match-string 2 line))) + (text (match-string 3 line)) + (text2 text) + (syn-table (copy-syntax-table)) + (case-fold-search t)) + (modify-syntax-entry ?$ "w" syn-table) + (modify-syntax-entry ?# "w" syn-table) + (modify-syntax-entry ?_ "w" syn-table) + (with-syntax-table syn-table + (when (and (or (and (not object-type) + (> (length raw-grep-result) 1)) + (equal object-type "SYNONYM")) + (string-match "\\<\\(for\\|from\\|on\\|as\\)\\>" text2)) + (setq text2 (substring text2 0 (match-beginning 0)))) + ;; (message "GREP-RESULT: %s" text2) + (unless (or (not (string-match (concat "\\<" (regexp-quote object-name) "\\>") text2)) + (string-match (concat "\\(--\\|\\\\|\\\\|\\\\|\\\\).*\\<" + (regexp-quote object-name) "\\>") text2) + (and (or (and (not object-type) + (> (length raw-grep-result) 1)) + (equal object-type "TRIGGER")) + (string-match "\\<\\(alter\\|disable\\|enable\\)\\>" text2)) + (and (or (and (not object-type) + (string-match "\\" text2) + current-prefix-arg) + (equal object-type "PACKAGE")) + (string-match "\\" text2)) + (and (or (and (not object-type) + (string-match "\\" text2) + (not current-prefix-arg)) + (equal object-type "PACKAGE BODY")) + (not (string-match "\\" text2))) + (and (not object-type) + (not current-prefix-arg) + (string-match "[.]pks$" path))) + (list path line-no text))))) + raw-grep-result)))) + (if batch-mode + grep-result + (cond ((not grep-result) + (error "Not found")) + ((eql (length grep-result) 1) + (sqlplus-switch-to-buffer (caar grep-result) (cadar grep-result)) + (when connect-string + (setq sqlplus-connect-string connect-string))) + (t + (let ((search-buffer (get-buffer-create sqlplus-search-buffer-name))) + (with-current-buffer search-buffer + (setq buffer-read-only t) + (let ((inhibit-read-only t)) + (setq default-directory root-dir) + (erase-buffer) + (insert "Root dir: ") + (sqlplus-proj-insert-with-face root-dir 'font-lock-keyword-face) + (insert "; Range: ") + (sqlplus-proj-insert-with-face (mapconcat (lambda (sym) (sqlplus-mode-name-stringify sym)) mode-symbol-list ", ") + 'font-lock-keyword-face) + (insert "; Object type: ") + (sqlplus-proj-insert-with-face (or object-type "unspecified") 'font-lock-keyword-face) + (insert "; Object name: ") + (sqlplus-proj-insert-with-face object-name 'font-lock-keyword-face) + (insert "\n\n") + (compilation-minor-mode 1) + (dolist (result grep-result) + (let ((relative-path (concat "./" (file-relative-name (car result) root-dir))) + (line-no (cadr result)) + (text (caddr result))) + (put-text-property 0 (length relative-path) 'mouse-face 'highlight relative-path) + (insert relative-path) + (insert (format ":%S:1 %s\n" line-no text)))) + (insert (format "\n%d matches found." (length grep-result))) + (goto-char (point-min)) + (when (and grep-result (fboundp 'compile-reinitialize-errors) (funcall (symbol-function 'compile-reinitialize-errors) t))) + (switch-to-buffer-other-window search-buffer) + (goto-line 1) + (goto-line 3)))))))))) + +(defun sqlplus-mode-name-stringify (mode-name) + (let ((name (format "%s" mode-name))) + (replace-regexp-in-string "-" " " + (capitalize + (if (string-match "^\\(.*\\)-mode" name) + (match-string 1 name) + name))))) + +(defun sqlplus-proj-insert-with-face (string face) + (let ((point (point))) + (insert string) + (let ((overlay (make-overlay point (point)))) + (overlay-put overlay 'face face)))) + +(defun sqlplus-set-project-for-connect-string (connect-string) + (if (featurep 'ide-skel) + ;; Prepare sqlplus-root-dir-history (file-name-history) for user convenience + ;; 0. previous project root + ;; 1. current editor file project root + ;; 2. previous choices + ;; 3. new project roots + (let* ((prev-proj-root-dir (sqlplus-get-root-dir connect-string)) + (last-sel-window (funcall 'ide-skel-get-last-selected-window)) + (editor-file-proj-root-dir (when last-sel-window + (let* ((buffer (window-buffer last-sel-window)) + (path (and buffer (buffer-file-name buffer))) + (project (and path (car (funcall 'ide-skel-proj-get-project-create path))))) + (when (funcall 'ide-skel-project-p project) + (funcall 'ide-skel-project-root-path project)))))) + (setq sqlplus-root-dir-history + (delete-dups + (delq nil + (mapcar (lambda (dir) + (when dir + (directory-file-name (file-truename (substitute-in-file-name dir))))) + (append + (list editor-file-proj-root-dir prev-proj-root-dir) + sqlplus-root-dir-history + (mapcar (lambda (project) (funcall 'ide-skel-project-root-path project)) + (symbol-value 'ide-skel-projects))))))) + (let* ((file-name-history (cdr sqlplus-root-dir-history)) + (use-file-dialog nil) + (dir (directory-file-name (file-truename (substitute-in-file-name + (read-directory-name (format "Root dir for %s: " (car (refine-connect-string connect-string))) + (car sqlplus-root-dir-history) + (car sqlplus-root-dir-history) + t + nil)))))) + (funcall 'ide-skel-proj-get-project-create dir) + (sqlplus-set-root-dir dir connect-string) + (message (format "Root dir for %s set to %s" (car (refine-connect-string connect-string)) dir)) + dir)) + (let* ((use-file-dialog nil) + (dir (directory-file-name (file-truename (substitute-in-file-name + (read-directory-name (format "Root dir for %s: " (car (refine-connect-string connect-string))) + nil nil t nil)))))) + (sqlplus-set-root-dir dir connect-string) + (message (format "Root dir for %s set to %s" (car (refine-connect-string connect-string)) dir)) + dir))) + +;;; Plugin for ide-skel.el + +(defstruct sqlplus-tab + id + name ; tab name + symbol ; view/sequence/schema/trigger/index/table/package/synonym/procedure + help-string + (display-start 1) ; display-start in side view window + (data nil) ; '(("name" . status)...), where status t means 'invalid' + draw-function ; parameters: sqlplus-tab + click-function ; parameters: event "@e" + (errors-count 0) + (refresh-in-progress t) + update-select) + +(defvar sqlplus-side-view-connect-string nil) +(make-variable-buffer-local 'sqlplus-side-view-connect-string) + +(defvar sqlplus-side-view-active-tab nil) +(make-variable-buffer-local 'sqlplus-side-view-active-tab) + +(defvar sqlplus-side-view-tabset nil) +(make-variable-buffer-local 'sqlplus-side-view-tabset) + +(defface sqlplus-side-view-face '((t :inherit variable-pitch :height 0.8)) + "Default face used in right view" + :group 'sqlplus) + +(defvar sqlplus-side-view-keymap nil) +(unless sqlplus-side-view-keymap + (setq sqlplus-side-view-keymap (make-sparse-keymap)) + (define-key sqlplus-side-view-keymap [mode-line down-mouse-1] 'ignore) + (define-key sqlplus-side-view-keymap [mode-line mouse-1] 'sqlplus-side-view-tab-click)) + +(defun sqlplus-side-view-tab-click (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (let* ((previous-sel-tab-info (nth sqlplus-side-view-active-tab sqlplus-side-view-tabset)) + (target (posn-string (event-start event))) + (tab-info (get-text-property (cdr target) 'tab-info (car target)))) + (setf (sqlplus-tab-display-start previous-sel-tab-info) (line-number-at-pos (window-start))) + (setq sqlplus-side-view-active-tab (sqlplus-tab-id tab-info)) + (sqlplus-side-view-redraw (current-buffer) t) + (sqlplus-side-view-buffer-mode-line)))) + +(defun sqlplus-side-view-buffer-mode-line () + (let* ((separator (propertize " " + 'face 'header-line + 'display '(space :width 0.2) + 'pointer 'arrow))) + (setq mode-line-format + (concat separator + (mapconcat (lambda (tab) + (let ((face (if (eq (sqlplus-tab-id tab) sqlplus-side-view-active-tab) + 'tabbar-selected + 'tabbar-unselected)) + (help-echo (concat (sqlplus-tab-help-string tab) + (if (> (sqlplus-tab-errors-count tab) 0) + (format "\n(%s error%s)" (sqlplus-tab-errors-count tab) + (if (> (sqlplus-tab-errors-count tab) 1) "s" "")) + "")))) + (propertize (format " %s " (sqlplus-tab-name tab)) + 'local-map sqlplus-side-view-keymap + 'tab-info tab + 'help-echo help-echo + 'mouse-face 'tabbar-highlight + 'face (if (> (sqlplus-tab-errors-count tab) 0) + (list '(foreground-color . "red") face) + face) + 'pointer 'hand))) + sqlplus-side-view-tabset + separator) + separator)))) + +(defun sqlplus-side-view-click-on-default-handler (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (let* ((posn-point (posn-point (event-start event))) + (object-name (get-text-property posn-point 'object-name)) + (object-type (get-text-property posn-point 'object-type)) + (type (car event))) + (when (eq type 'mouse-3) + (setq type (car (x-popup-menu t (append (list 'keymap object-name) + (list '(sqlplus-refresh-side-view-buffer "Refresh" t)) + (list '(mouse-1 "Get source from Oracle" t)) + (list '(M-mouse-1 "Search source in filesystem" t)) + (list (list 'C-M-mouse-1 (concat "Set root dir for " (car (refine-connect-string sqlplus-side-view-connect-string))) t)) + ))))) + (cond ((eq type 'mouse-1) + (sqlplus-get-source sqlplus-side-view-connect-string object-name object-type)) + ((eq type 'M-mouse-1) + (sqlplus-file-get-source sqlplus-side-view-connect-string object-name object-type)) + ((eq type 'C-M-mouse-1) + (sqlplus-set-project-for-connect-string sqlplus-side-view-connect-string)) + ((eq type nil)) + (t + (condition-case err + (funcall type) + (error nil))))))) + +(defun sqlplus-side-view-click-on-index-handler (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (let* ((posn-point (posn-point (event-start event))) + (object-name (get-text-property posn-point 'object-name)) + (object-type (get-text-property posn-point 'object-type)) + (type (car event))) + (when (eq type 'mouse-3) + (setq type (car (x-popup-menu t (append (list 'keymap object-name) + (list '(sqlplus-refresh-side-view-buffer "Refresh" t)) + (list '(mouse-1 "Get source from Oracle" t)) + (list '(M-mouse-1 "Search source in filesystem" t)) + (list (list 'C-M-mouse-1 (concat "Set root dir for " (car (refine-connect-string sqlplus-side-view-connect-string))) t)) + ))))) + (cond ((eq type 'mouse-1) + (sqlplus-get-source sqlplus-side-view-connect-string object-name object-type)) + ((eq type 'M-mouse-1) + (sqlplus-file-get-source sqlplus-side-view-connect-string object-name object-type)) + ((eq type 'C-M-mouse-1) + (sqlplus-set-project-for-connect-string sqlplus-side-view-connect-string)) + ((eq type nil)) + (t + (condition-case err + (funcall type) + (error nil))))))) + +(defun sqlplus-side-view-click-on-schema-handler (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (let* ((posn-point (posn-point (event-start event))) + (object-name (get-text-property posn-point 'object-name)) + (object-type (get-text-property posn-point 'object-type)) + (last-selected-win (funcall 'ide-skel-get-last-selected-window)) + (type (car event))) + (when (eq type 'mouse-3) + (setq type (car (x-popup-menu t (append (list 'keymap object-name) + (list '(sqlplus-refresh-side-view-buffer "Refresh" t)) + (list '(mouse-1 "Connect to schema" t)) + (list '(M-mouse-1 "Search source in filesystem" t)) + (list (list 'C-M-mouse-1 (concat "Set root dir for " (car (refine-connect-string sqlplus-side-view-connect-string))) t)) + ))))) + (cond ((eq type 'mouse-1) + (when (string-match "@.*$" sqlplus-side-view-connect-string) + (let* ((cs (downcase (concat object-name (match-string 0 sqlplus-side-view-connect-string)))) + (pair (sqlplus-read-connect-string cs cs))) + (select-window (or last-selected-win (funcall 'ide-skel-get-editor-window))) + (sqlplus (car pair) (concat (cadr pair) (concat "." sqlplus-session-file-extension)))))) + ((eq type 'M-mouse-1) + (sqlplus-file-get-source sqlplus-side-view-connect-string object-name object-type)) + ((eq type 'C-M-mouse-1) + (sqlplus-set-project-for-connect-string sqlplus-side-view-connect-string)) + ((eq type nil)) + (t + (condition-case err + (funcall type) + (error nil)))) + (select-window (funcall 'ide-skel-get-last-selected-window))))) + +(defun sqlplus-side-view-click-on-table-handler (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (let* ((posn-point (posn-point (event-start event))) + (object-name (get-text-property posn-point 'object-name)) + (object-type (get-text-property posn-point 'object-type)) + (type (car event))) + (when (eq type 'mouse-3) + (setq type (car (x-popup-menu t (append (list 'keymap object-name) + (list '(sqlplus-refresh-side-view-buffer "Refresh" t)) + (list '(mouse-1 "Show description" t)) + (list '(C-mouse-1 "Select *" t)) + (list '(S-mouse-1 "Get source from Oracle" t)) + (list '(M-mouse-1 "Search source in filesystem" t)) + (list (list 'C-M-mouse-1 (concat "Set root dir for " (car (refine-connect-string sqlplus-side-view-connect-string))) t)) + ))))) + (cond ((eq type 'mouse-1) + (sqlplus-execute sqlplus-side-view-connect-string + (sqlplus-fontify-string sqlplus-side-view-connect-string (format "desc %s;" object-name)) + nil nil)) + ((eq type 'C-mouse-1) + (sqlplus-execute sqlplus-side-view-connect-string + (sqlplus-fontify-string sqlplus-side-view-connect-string (format "select * from %s;" object-name)) + nil nil)) + ((eq type 'S-mouse-1) + (sqlplus-get-source sqlplus-side-view-connect-string object-name object-type)) + ((eq type 'M-mouse-1) + (sqlplus-file-get-source sqlplus-side-view-connect-string object-name object-type)) + ((eq type 'C-M-mouse-1) + (sqlplus-set-project-for-connect-string sqlplus-side-view-connect-string)) + ((eq type nil)) + (t + (condition-case err + (funcall type) + (error nil)))) + (select-window (funcall 'ide-skel-get-last-selected-window))))) + +(defun sqlplus-side-view-click-on-package-handler (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (let* ((posn-point (posn-point (event-start event))) + (object-name (get-text-property posn-point 'object-name)) + (object-type (get-text-property posn-point 'object-type)) + (type (car event))) + (when (eq type 'mouse-3) + (setq type (car (x-popup-menu t (append (list 'keymap object-name) + (list '(sqlplus-refresh-side-view-buffer "Refresh" t)) + (list '(S-mouse-1 "Get package header from Oracle" t)) + (list '(mouse-1 "Get package body from Oracle" t)) + (list '(S-M-mouse-1 "Search header source in filesystem" t)) + (list '(M-mouse-1 "Search body source in filesystem" t)) + (list (list 'C-M-mouse-1 (concat "Set root dir for " (car (refine-connect-string sqlplus-side-view-connect-string))) t)) + ))))) + (cond ((eq type 'S-mouse-1) + (sqlplus-get-source sqlplus-side-view-connect-string object-name object-type)) + ((eq type 'mouse-1) + (sqlplus-get-source sqlplus-side-view-connect-string object-name "PACKAGE BODY")) + ((eq type 'M-mouse-1) + (sqlplus-file-get-source sqlplus-side-view-connect-string object-name "PACKAGE BODY")) + ((eq type 'S-M-mouse-1) + (sqlplus-file-get-source sqlplus-side-view-connect-string object-name "PACKAGE")) + ((eq type 'C-M-mouse-1) + (sqlplus-set-project-for-connect-string sqlplus-side-view-connect-string)) + ((eq type nil)) + (t + (condition-case err + (funcall type) + (error nil))))))) + +(defun sqlplus-side-view-default-draw-panel (tab-info click-function) + (let ((pairs (sort (sqlplus-tab-data tab-info) + (lambda (pair1 pair2) (string< (car pair1) (car pair2))))) + (type-name (upcase (symbol-name (sqlplus-tab-symbol tab-info))))) + (dolist (pair pairs) + (let* ((label (format " % -100s" (car pair))) + (km (make-sparse-keymap))) + (define-key km [down-mouse-1] 'ignore) + (define-key km [mouse-1] click-function) + (define-key km [C-down-mouse-1] 'ignore) + (define-key km [C-mouse-1] click-function) + (define-key km [S-down-mouse-1] 'ignore) + (define-key km [S-mouse-1] click-function) + (define-key km [down-mouse-3] 'ignore) + (define-key km [mouse-3] click-function) + (setq label (propertize label + 'mouse-face 'ide-skel-highlight-face + 'face (if (cdr pair) + '(sqlplus-side-view-face (foreground-color . "red")) + 'sqlplus-side-view-face) + 'local-map km + 'pointer 'hand + 'object-name (car pair) + 'object-type type-name)) + (insert label) + (insert "\n"))))) + +(defun sqlplus-refresh-side-view-buffer () + (let* ((tab-info (nth sqlplus-side-view-active-tab sqlplus-side-view-tabset)) + (update-select (sqlplus-tab-update-select tab-info))) + (unless (sqlplus-tab-refresh-in-progress tab-info) + (sqlplus-hidden-select sqlplus-side-view-connect-string update-select 'sqlplus-my-update-handler)))) + +(defun sqlplus-get-default-update-select (symbol) + (concat "select object_name, object_type, decode( status, 'INVALID', 'I', ' ' ) from user_objects\n" + "where object_name not like 'BIN$%'\n" + (format "and object_type = '%s';" (upcase (symbol-name symbol))))) + +(defun sqlplus-create-side-view-buffer (connect-string) + (let* ((original-connect-string connect-string) + (connect-string (car (refine-connect-string connect-string))) + (buffer (funcall 'ide-skel-get-side-view-buffer-create + (concat " Ide Skel Right View SQL " connect-string) + 'right "SQL" (concat "SQL Panel for " connect-string) + (lambda (editor-buffer) + (let ((connect-string sqlplus-side-view-connect-string)) + (with-current-buffer editor-buffer + (and connect-string + (equal (car (refine-connect-string sqlplus-connect-string)) + (car (refine-connect-string connect-string))) + ))))))) + (with-current-buffer buffer + (set 'ide-skel-tabbar-menu-function + (lambda () + (let ((tab-info (nth sqlplus-side-view-active-tab sqlplus-side-view-tabset))) + (list + (unless (sqlplus-tab-refresh-in-progress tab-info) + '(sqlplus-refresh-side-view-buffer "Refresh" t)))))) + (setq sqlplus-side-view-connect-string original-connect-string + sqlplus-side-view-active-tab 0 + sqlplus-side-view-tabset + (list + (make-sqlplus-tab :id 0 :name "Tab" :symbol 'table :help-string "Tables" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select (sqlplus-get-default-update-select 'table) + :click-function 'sqlplus-side-view-click-on-table-handler) + (make-sqlplus-tab :id 1 :name "Vie" :symbol 'view :help-string "Views" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select (sqlplus-get-default-update-select 'view) + :click-function 'sqlplus-side-view-click-on-table-handler) + (make-sqlplus-tab :id 2 :name "Idx" :symbol 'index :help-string "Indexes" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select (sqlplus-get-default-update-select 'index) + :click-function 'sqlplus-side-view-click-on-index-handler) + (make-sqlplus-tab :id 3 :name "Tri" :symbol 'trigger :help-string "Triggers" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select (sqlplus-get-default-update-select 'trigger) + :click-function 'sqlplus-side-view-click-on-default-handler) + (make-sqlplus-tab :id 4 :name "Seq" :symbol 'sequence :help-string "Sequences" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select (sqlplus-get-default-update-select 'sequence) + :click-function 'sqlplus-side-view-click-on-default-handler) + (make-sqlplus-tab :id 5 :name "Syn" :symbol 'synonym :help-string "Synonyms" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select (sqlplus-get-default-update-select 'synonym) + :click-function 'sqlplus-side-view-click-on-default-handler) + (make-sqlplus-tab :id 6 :name "Pkg" :symbol 'package :help-string "PL/SQL Packages" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select (sqlplus-get-default-update-select 'package) + :click-function 'sqlplus-side-view-click-on-package-handler) + (make-sqlplus-tab :id 7 :name "Prc" :symbol 'procedure :help-string "PL/SQL Functions & Procedures" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select (concat "select object_name, object_type, decode( status, 'INVALID', 'I', ' ' ) from user_objects\n" + "where object_name not like 'BIN$%'\n" + "and object_type in ('FUNCTION', 'PROCEDURE');") + :click-function 'sqlplus-side-view-click-on-default-handler) + (make-sqlplus-tab :id 8 :name "Sch" :symbol 'schema :help-string "Schemas" :draw-function 'sqlplus-side-view-default-draw-panel + :update-select "select username, 'SCHEMA', ' ' from all_users where username not like 'BIN$%';" + :click-function 'sqlplus-side-view-click-on-schema-handler) + )) + (sqlplus-side-view-buffer-mode-line)) + buffer)) + +(defun sqlplus-side-view-redraw (sql-view-buffer &optional window-start-from-tab-info) + (with-current-buffer sql-view-buffer + (let* ((point (point)) + (tab-info (nth sqlplus-side-view-active-tab sqlplus-side-view-tabset)) + (window-start (when (and (symbol-value 'ide-skel-current-right-view-window) + (eq (window-buffer (symbol-value 'ide-skel-current-right-view-window)) (current-buffer))) + (if window-start-from-tab-info + (sqlplus-tab-display-start tab-info) + (line-number-at-pos (window-start (symbol-value 'ide-skel-current-right-view-window))))))) + (let ((inhibit-read-only t)) + (setq buffer-read-only nil) + (erase-buffer) + (when (sqlplus-tab-draw-function tab-info) + (funcall (sqlplus-tab-draw-function tab-info) tab-info (sqlplus-tab-click-function tab-info)))) + (if window-start + (let ((pos (save-excursion + (goto-line window-start) + (beginning-of-line) + (point)))) + (set-window-start (symbol-value 'ide-skel-current-right-view-window) pos) + (setf (sqlplus-tab-display-start tab-info) window-start)) + (goto-char point) + (beginning-of-line))))) + +(defun sqlplus-side-view-update-data (connect-string alist) + (let* ((connect-string (car (refine-connect-string connect-string))) + (sql-view-buffer (sqlplus-get-side-view-buffer connect-string)) + was-proc) + (when sql-view-buffer + (with-current-buffer sql-view-buffer + (dolist (pair alist) + (let* ((symbol (if (eq (car pair) 'function) 'procedure (car pair))) + (data-list (cdr pair)) + (tab-info (some (lambda (tab) + (when (eq (sqlplus-tab-symbol tab) symbol) + tab)) + sqlplus-side-view-tabset))) + (when tab-info + (setf (sqlplus-tab-refresh-in-progress tab-info) nil) + (setf (sqlplus-tab-data tab-info) + (if (and (eq symbol 'procedure) + was-proc) + (append (sqlplus-tab-data tab-info) (copy-list data-list)) + data-list)) + (when (eq symbol 'procedure) + (setq was-proc t)) + (setf (sqlplus-tab-errors-count tab-info) + (count t (mapcar 'cdr data-list))) + (when (eql sqlplus-side-view-active-tab (sqlplus-tab-id tab-info)) + (sqlplus-side-view-redraw (current-buffer)))))) + (sqlplus-side-view-buffer-mode-line) + (force-mode-line-update))))) + +(defun sqlplus-side-view-window-function (side event &rest list) + (when (and (eq side 'right) + (symbol-value 'ide-skel-current-right-view-window) + (with-current-buffer (symbol-value 'ide-skel-current-editor-buffer) + sqlplus-connect-string)) + (cond ((memq event '(show editor-buffer-changed)) + (let ((sql-view-buffer (sqlplus-get-side-view-buffer (with-current-buffer (symbol-value 'ide-skel-current-editor-buffer) + sqlplus-connect-string)))) + (when sql-view-buffer + (with-current-buffer sql-view-buffer + (set 'ide-skel-tabbar-enabled t) + (funcall 'ide-skel-side-window-switch-to-buffer (symbol-value 'ide-skel-current-right-view-window) sql-view-buffer))))))) + nil) + +(add-hook 'ide-skel-side-view-window-functions 'sqlplus-side-view-window-function) + + +(provide 'sqlplus) + +;;; sqlplus.el ends here diff --git a/.emacs.d/themes/color-theme-example.el b/.emacs.d/themes/color-theme-example.el new file mode 100644 index 0000000..f73b4f6 --- /dev/null +++ b/.emacs.d/themes/color-theme-example.el @@ -0,0 +1,22 @@ +(eval-when-compile + (require 'color-theme)) + +(defun color-theme-example () + "Example theme. Carbon copy of color-theme-gnome contributed by Jonadab." + (interactive) + (color-theme-install + '(color-theme-example + ((foreground-color . "wheat") + (background-color . "darkslategrey") + (background-mode . dark)) + (default ((t (nil)))) + (region ((t (:foreground "cyan" :background "dark cyan")))) + (underline ((t (:foreground "yellow" :underline t)))) + (modeline ((t (:foreground "dark cyan" :background "wheat")))) + (modeline-buffer-id ((t (:foreground "dark cyan" :background "wheat")))) + (modeline-mousable ((t (:foreground "dark cyan" :background "wheat")))) + (modeline-mousable-minor-mode ((t (:foreground "dark cyan" :background "wheat")))) + (italic ((t (:foreground "dark red" :italic t)))) + (bold-italic ((t (:foreground "dark red" :bold t :italic t)))) + (font-lock-comment-face ((t (:foreground "Firebrick")))) + (bold ((t (:bold))))))) diff --git a/.emacs.d/themes/color-theme-library.el b/.emacs.d/themes/color-theme-library.el new file mode 100644 index 0000000..d194708 --- /dev/null +++ b/.emacs.d/themes/color-theme-library.el @@ -0,0 +1,13539 @@ +;;; color-theme-library.el --- The real color theme functions + +;; Copyright (C) 2005, 2006 Xavier Maillard +;; Copyright (C) 2005, 2006 Brian Palmer + +;; Version: 0.0.9 +;; Keywords: faces +;; Author: Brian Palmer, Xavier Maillard +;; Maintainer: Xavier Maillard +;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ColorTheme + +;; This file is not (YET) part of GNU Emacs. + +;; This is free software; you can redistribute it and/or modify it under +;; the terms of the GNU General Public License as published by the Free +;; Software Foundation; either version 2, or (at your option) any later +;; version. +;; +;; This 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 GNU General Public License +;; for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +;; MA 02111-1307, USA. + +;; Code: +(eval-when-compile + (require 'color-theme)) + +(defun color-theme-gnome () + "Wheat on darkslategrey scheme. +From one version of Emacs in RH6 and Gnome, modified by Jonadab." + (interactive) + (color-theme-install + '(color-theme-gnome + ((foreground-color . "wheat") + (background-color . "darkslategrey") + (background-mode . dark)) + (default ((t (nil)))) + (region ((t (:foreground "cyan" :background "dark cyan")))) + (underline ((t (:foreground "yellow" :underline t)))) + (modeline ((t (:foreground "dark cyan" :background "wheat")))) + (modeline-buffer-id ((t (:foreground "dark cyan" :background "wheat")))) + (modeline-mousable ((t (:foreground "dark cyan" :background "wheat")))) + (modeline-mousable-minor-mode ((t (:foreground "dark cyan" :background "wheat")))) + (italic ((t (:foreground "dark red" :italic t)))) + (bold-italic ((t (:foreground "dark red" :bold t :italic t)))) + (font-lock-comment-face ((t (:foreground "Firebrick")))) + (bold ((t (:bold))))))) + +(defun color-theme-blue-gnus () + "Color theme for gnus and message faces only. +This is intended for other color themes to use (eg. `color-theme-gnome2' +and `color-theme-blue-sea')." + (interactive) + (color-theme-install + '(color-theme-blue-gnus + nil + (gnus-cite-attribution-face ((t (:lforeground "lemon chiffon" :bold t)))) + (gnus-cite-face-1 ((t (:foreground "LightSalmon")))) + (gnus-cite-face-2 ((t (:foreground "Khaki")))) + (gnus-cite-face-3 ((t (:foreground "Coral")))) + (gnus-cite-face-4 ((t (:foreground "yellow green")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "bisque")))) + (gnus-cite-face-7 ((t (:foreground "peru")))) + (gnus-cite-face-8 ((t (:foreground "light coral")))) + (gnus-cite-face-9 ((t (:foreground "plum")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "White")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "White")))) + (gnus-group-mail-2-empty-face ((t (:foreground "light cyan")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "light cyan")))) + (gnus-group-mail-3-empty-face ((t (:foreground "LightBlue")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "LightBlue")))) + (gnus-group-mail-low-empty-face ((t (:foreground "Aquamarine")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "Aquamarine")))) + (gnus-group-news-1-empty-face ((t (:foreground "White")))) + (gnus-group-news-1-face ((t (:bold t :foreground "White")))) + (gnus-group-news-2-empty-face ((t (:foreground "light cyan")))) + (gnus-group-news-2-face ((t (:bold t :foreground "light cyan")))) + (gnus-group-news-3-empty-face ((t (:foreground "LightBlue")))) + (gnus-group-news-3-face ((t (:bold t :foreground "LightBlue")))) + (gnus-group-news-4-empty-face ((t (:foreground "Aquamarine")))) + (gnus-group-news-4-face ((t (:bold t :foreground "Aquamarine")))) + (gnus-group-news-5-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-5-face ((t (:bold t :foreground "MediumAquamarine")))) + (gnus-group-news-6-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-6-face ((t (:bold t :foreground "MediumAquamarine")))) + (gnus-group-news-low-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-low-face ((t (:bold t :foreground "MediumAquamarine")))) + (gnus-header-content-face ((t (:foreground "LightSkyBlue3")))) + (gnus-header-from-face ((t (:bold t :foreground "light cyan")))) + (gnus-header-name-face ((t (:bold t :foreground "LightBlue")))) + (gnus-header-newsgroups-face ((t (:bold t :foreground "MediumAquamarine")))) + (gnus-header-subject-face ((t (:bold t :foreground "light cyan")))) + (gnus-signature-face ((t (:foreground "Grey")))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-summary-cancelled-face ((t (:background "Black" :foreground "Yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "MediumAquamarine")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "Aquamarine")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "LightSalmon")))) + (gnus-summary-high-unread-face ((t (:bold t :foreground "beige")))) + (gnus-summary-low-ancient-face ((t (:foreground "DimGray")))) + (gnus-summary-low-read-face ((t (:foreground "slate gray")))) + (gnus-summary-low-ticked-face ((t (:foreground "Pink")))) + (gnus-summary-low-unread-face ((t (:foreground "LightGray")))) + (gnus-summary-normal-ancient-face ((t (:foreground "MediumAquamarine")))) + (gnus-summary-normal-read-face ((t (:foreground "Aquamarine")))) + (gnus-summary-normal-ticked-face ((t (:foreground "LightSalmon")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:background "DarkSlateBlue")))) + (message-cited-text-face ((t (:foreground "LightSalmon")))) + (message-header-cc-face ((t (:foreground "light cyan")))) + (message-header-name-face ((t (:foreground "LightBlue")))) + (message-header-newsgroups-face ((t (:bold t :foreground "MediumAquamarine")))) + (message-header-other-face ((t (:foreground "MediumAquamarine")))) + (message-header-subject-face ((t (:bold t :foreground "light cyan")))) + (message-header-to-face ((t (:bold t :foreground "light cyan")))) + (message-header-xheader-face ((t (:foreground "MediumAquamarine")))) + (message-separator-face ((t (:foreground "chocolate"))))))) + +(defun color-theme-dark-gnus () + "Color theme for gnus and message faces only. +This is intended for other color themes to use +\(eg. `color-theme-late-night')." + (interactive) + (color-theme-install + '(color-theme-blue-gnus + nil + (gnus-cite-attribution-face ((t (:foreground "#bbb")))) + (gnus-cite-face-1 ((t (:foreground "#aaa")))) + (gnus-cite-face-2 ((t (:foreground "#aaa")))) + (gnus-cite-face-3 ((t (:foreground "#aaa")))) + (gnus-cite-face-4 ((t (:foreground "#aaa")))) + (gnus-cite-face-5 ((t (:foreground "#aaa")))) + (gnus-cite-face-6 ((t (:foreground "#aaa")))) + (gnus-cite-face-7 ((t (:foreground "#aaa")))) + (gnus-cite-face-8 ((t (:foreground "#aaa")))) + (gnus-cite-face-9 ((t (:foreground "#aaa")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:foreground "#ccc")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "#999")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "#999")))) + (gnus-group-mail-2-empty-face ((t (:foreground "#999")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "#999")))) + (gnus-group-mail-3-empty-face ((t (:foreground "#888")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "#888")))) + (gnus-group-mail-low-empty-face ((t (:foreground "#777")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "#777")))) + (gnus-group-news-1-empty-face ((t (:foreground "#999")))) + (gnus-group-news-1-face ((t (:bold t :foreground "#999")))) + (gnus-group-news-2-empty-face ((t (:foreground "#888")))) + (gnus-group-news-2-face ((t (:bold t :foreground "#888")))) + (gnus-group-news-3-empty-face ((t (:foreground "#777")))) + (gnus-group-news-3-face ((t (:bold t :foreground "#777")))) + (gnus-group-news-4-empty-face ((t (:foreground "#666")))) + (gnus-group-news-4-face ((t (:bold t :foreground "#666")))) + (gnus-group-news-5-empty-face ((t (:foreground "#666")))) + (gnus-group-news-5-face ((t (:bold t :foreground "#666")))) + (gnus-group-news-6-empty-face ((t (:foreground "#666")))) + (gnus-group-news-6-face ((t (:bold t :foreground "#666")))) + (gnus-group-news-low-empty-face ((t (:foreground "#666")))) + (gnus-group-news-low-face ((t (:bold t :foreground "#666")))) + (gnus-header-content-face ((t (:foreground "#888")))) + (gnus-header-from-face ((t (:bold t :foreground "#888")))) + (gnus-header-name-face ((t (:bold t :foreground "#777")))) + (gnus-header-newsgroups-face ((t (:bold t :foreground "#777")))) + (gnus-header-subject-face ((t (:bold t :foreground "#999")))) + (gnus-signature-face ((t (:foreground "#444")))) + (gnus-splash-face ((t (:foreground "#ccc")))) + (gnus-summary-cancelled-face ((t (:background "#555" :foreground "#000")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "#555")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "#666")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "#777")))) + (gnus-summary-high-unread-face ((t (:bold t :foreground "#888")))) + (gnus-summary-low-ancient-face ((t (:foreground "#444")))) + (gnus-summary-low-read-face ((t (:foreground "#555")))) + (gnus-summary-low-ticked-face ((t (:foreground "#666")))) + (gnus-summary-low-unread-face ((t (:foreground "#777")))) + (gnus-summary-normal-ancient-face ((t (:foreground "#555")))) + (gnus-summary-normal-read-face ((t (:foreground "#666")))) + (gnus-summary-normal-ticked-face ((t (:foreground "#777")))) + (gnus-summary-normal-unread-face ((t (:foreground "#888")))) + (gnus-summary-selected-face ((t (:background "#333")))) + (message-cited-text-face ((t (:foreground "#aaa")))) + (message-header-cc-face ((t (:foreground "#888")))) + (message-header-name-face ((t (:bold t :foreground "#777")))) + (message-header-newsgroups-face ((t (:bold t :foreground "#777")))) + (message-header-other-face ((t (:foreground "#666")))) + (message-header-subject-face ((t (:bold t :foreground "#999")))) + (message-header-to-face ((t (:bold t :foreground "#777")))) + (message-header-xheader-face ((t (:foreground "#666")))) + (message-separator-face ((t (:foreground "#999"))))))) + +(defun color-theme-blue-eshell () + "Color theme for eshell faces only. +This is intended for other color themes to use (eg. `color-theme-gnome2')." + (interactive) + (color-theme-install + '(color-theme-blue-eshell + nil + (eshell-ls-archive-face ((t (:bold t :foreground "IndianRed")))) + (eshell-ls-backup-face ((t (:foreground "Grey")))) + (eshell-ls-clutter-face ((t (:foreground "DimGray")))) + (eshell-ls-directory-face ((t (:bold t :foreground "MediumSlateBlue")))) + (eshell-ls-executable-face ((t (:foreground "Coral")))) + (eshell-ls-missing-face ((t (:foreground "black")))) + (eshell-ls-picture-face ((t (:foreground "Violet")))) ; non-standard face + (eshell-ls-product-face ((t (:foreground "LightSalmon")))) + (eshell-ls-readonly-face ((t (:foreground "Aquamarine")))) + (eshell-ls-special-face ((t (:foreground "Gold")))) + (eshell-ls-symlink-face ((t (:foreground "White")))) + (eshell-ls-text-face ((t (:foreground "medium aquamarine")))) ; non-standard face + (eshell-ls-todo-face ((t (:bold t :foreground "aquamarine")))) ; non-standard face + (eshell-ls-unreadable-face ((t (:foreground "DimGray")))) + (eshell-prompt-face ((t (:foreground "powder blue"))))))) + +(defun color-theme-salmon-font-lock () + "Color theme for font-lock faces only. +This is intended for other color themes to use (eg. `color-theme-gnome2')." + (interactive) + (color-theme-install + '(color-theme-salmon-font-lock + nil + (font-lock-builtin-face ((t (:bold t :foreground "PaleGreen")))) + (font-lock-comment-face ((t (:foreground "LightBlue")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-doc-string-face ((t (:foreground "LightSalmon")))) + (font-lock-function-name-face ((t (:bold t :foreground "Aquamarine")))) + (font-lock-keyword-face ((t (:foreground "Salmon")))) + (font-lock-preprocessor-face ((t (:foreground "Salmon")))) + (font-lock-reference-face ((t (:foreground "pale green")))) + (font-lock-string-face ((t (:foreground "LightSalmon")))) + (font-lock-type-face ((t (:bold t :foreground "YellowGreen")))) + (font-lock-variable-name-face ((t (:bold t :foreground "Aquamarine")))) + (font-lock-warning-face ((t (:bold t :foreground "red"))))))) + +(defun color-theme-dark-font-lock () + "Color theme for font-lock faces only. +This is intended for other color themes to use (eg. `color-theme-late-night')." + (interactive) + (color-theme-install + '(color-theme-dark-font-lock + nil + (font-lock-builtin-face ((t (:bold t :foreground "#777")))) + (font-lock-comment-face ((t (:foreground "#555")))) + (font-lock-constant-face ((t (:foreground "#777")))) + (font-lock-doc-string-face ((t (:foreground "#777")))) + (font-lock-doc-face ((t (:foreground "#777")))) + (font-lock-function-name-face ((t (:bold t :foreground "#777")))) + (font-lock-keyword-face ((t (:foreground "#777")))) + (font-lock-preprocessor-face ((t (:foreground "#777")))) + (font-lock-reference-face ((t (:foreground "#777")))) + (font-lock-string-face ((t (:foreground "#777")))) + (font-lock-type-face ((t (:bold t)))) + (font-lock-variable-name-face ((t (:bold t :foreground "#888")))) + (font-lock-warning-face ((t (:bold t :foreground "#999"))))))) + +(defun color-theme-dark-info () + "Color theme for info, help and apropos faces. +This is intended for other color themes to use (eg. `color-theme-late-night')." + (interactive) + (color-theme-install + '(color-theme-dark-info + nil + (info-header-node ((t (:foreground "#666")))) + (info-header-xref ((t (:foreground "#666")))) + (info-menu-5 ((t (:underline t)))) + (info-menu-header ((t (:bold t :foreground "#666")))) + (info-node ((t (:bold t :foreground "#888")))) + (info-xref ((t (:bold t :foreground "#777"))))))) + +(defun color-theme-gnome2 () + "Wheat on darkslategrey scheme. +`color-theme-gnome' started it all. + +This theme supports standard faces, font-lock, eshell, info, message, +gnus, custom, widget, woman, diary, cperl, bbdb, and erc. This theme +includes faces for Emacs and XEmacs. + +The theme does not support w3 faces because w3 faces can be controlled +by your default style sheet. + +This is what you should put in your .Xdefaults file, if you want to +change the colors of the menus in Emacs 20 as well: + +emacs*Background: DarkSlateGray +emacs*Foreground: Wheat" + (interactive) + (color-theme-blue-gnus) + (let ((color-theme-is-cumulative t)) + (color-theme-blue-erc) + (color-theme-blue-eshell) + (color-theme-salmon-font-lock) + (color-theme-salmon-diff) + (color-theme-install + '(color-theme-gnome2 + ((foreground-color . "wheat") + (background-color . "darkslategrey") + (mouse-color . "Grey") + (cursor-color . "LightGray") + (border-color . "black") + (background-mode . dark)) + ((apropos-keybinding-face . underline) + (apropos-label-face . italic) + (apropos-match-face . secondary-selection) + (apropos-property-face . bold-italic) + (apropos-symbol-face . info-xref) + (goto-address-mail-face . message-header-to-face) + (goto-address-mail-mouse-face . secondary-selection) + (goto-address-url-face . info-xref) + (goto-address-url-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bbdb-company ((t (:foreground "pale green")))) + (bbdb-name ((t (:bold t :foreground "pale green")))) + (bbdb-field-name ((t (:foreground "medium sea green")))) + (bbdb-field-value ((t (:foreground "dark sea green")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t :foreground "beige")))) + (calendar-today-face ((t (:underline t)))) + (comint-highlight-prompt ((t (:foreground "medium aquamarine")))) + (cperl-array-face ((t (:foreground "Yellow")))) + (cperl-hash-face ((t (:foreground "White")))) + (cperl-nonoverridable-face ((t (:foreground "SkyBlue")))) + (custom-button-face ((t (:underline t :foreground "MediumSlateBlue")))) + (custom-documentation-face ((t (:foreground "Grey")))) + (custom-group-tag-face ((t (:foreground "MediumAquamarine")))) + (custom-state-face ((t (:foreground "LightSalmon")))) + (custom-variable-tag-face ((t (:foreground "Aquamarine")))) + (diary-face ((t (:foreground "IndianRed")))) + (dired-face-directory ((t (:bold t :foreground "sky blue")))) + (dired-face-permissions ((t (:foreground "aquamarine")))) + (dired-face-flagged ((t (:foreground "tomato")))) + (dired-face-marked ((t (:foreground "light salmon")))) + (dired-face-executable ((t (:foreground "green yellow")))) + (fringe ((t (:background "darkslategrey")))) + (highlight ((t (:background "PaleGreen" :foreground "DarkGreen")))) + (highline-face ((t (:background "SeaGreen")))) + (holiday-face ((t (:background "DimGray")))) + (hyper-apropos-hyperlink ((t (:bold t :foreground "DodgerBlue1")))) + (hyper-apropos-documentation ((t (:foreground "LightSalmon")))) + (info-header-xref ((t (:foreground "DodgerBlue1" :bold t)))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:underline t :bold t :foreground "DodgerBlue1")))) + (info-xref ((t (:bold t :foreground "DodgerBlue1")))) + (isearch ((t (:background "sea green")))) + (italic ((t (:italic t)))) + (menu ((t (:foreground "wheat" :background "darkslategrey")))) + (modeline ((t (:background "dark olive green" :foreground "wheat")))) + (modeline-buffer-id ((t (:background "dark olive green" :foreground "beige")))) + (modeline-mousable ((t (:background "dark olive green" :foreground "yellow green")))) + (modeline-mousable-minor-mode ((t (:background "dark olive green" :foreground "wheat")))) + (region ((t (:background "dark cyan" :foreground "cyan")))) + (secondary-selection ((t (:background "Aquamarine" :foreground "SlateBlue")))) + (show-paren-match-face ((t (:bold t :background "Aquamarine" :foreground "steel blue")))) + (show-paren-mismatch-face ((t (:background "Red" :foreground "White")))) + (underline ((t (:underline t)))) + (widget-field-face ((t (:foreground "LightBlue")))) + (widget-inactive-face ((t (:foreground "DimGray")))) + (widget-single-line-field-face ((t (:foreground "LightBlue")))) + (w3m-anchor-face ((t (:bold t :foreground "DodgerBlue1")))) + (w3m-arrived-anchor-face ((t (:bold t :foreground "DodgerBlue3")))) + (w3m-header-line-location-title-face ((t (:foreground "beige" :background "dark olive green")))) + (w3m-header-line-location-content-face ((t (:foreground "wheat" :background "dark olive green")))) + (woman-bold-face ((t (:bold t)))) + (woman-italic-face ((t (:foreground "beige")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))) + (zmacs-region ((t (:background "dark cyan" :foreground "cyan")))))))) + +(defun color-theme-simple-1 () + "Black background. +Doesn't mess with most faces, but does turn on dark background mode." + (interactive) + (color-theme-install + '(color-theme-simple-1 + ((foreground-color . "white") + (background-color . "black") + (cursor-color . "indian red") + (background-mode . dark)) + (default ((t (nil)))) + (modeline ((t (:foreground "black" :background "white")))) + (modeline-buffer-id ((t (:foreground "black" :background "white")))) + (modeline-mousable ((t (:foreground "black" :background "white")))) + (modeline-mousable-minor-mode ((t (:foreground "black" :background "white")))) + (underline ((t (:underline t)))) + (region ((t (:background "grey"))))))) + +(defun color-theme-jonadabian () + "Dark blue background. +Supports standard faces, font-lock, highlight-changes, widget and +custom." + (interactive) + (color-theme-install + '(color-theme-jonadabian + ((foreground-color . "#CCBB77") + (cursor-color . "medium turquoise") + (background-color . "#000055") + (background-mode . dark)) + (default ((t (nil)))) + (modeline ((t (:foreground "cyan" :background "#007080")))) + (modeline-buffer-id ((t (:foreground "cyan" :background "#007080")))) + (modeline-mousable ((t (:foreground "cyan" :background "#007080")))) + (modeline-mousable-minor-mode ((t (:foreground "cyan" :background "#007080")))) + (underline ((t (:underline t)))) + (region ((t (:background "#004080")))) + (font-lock-keyword-face ((t (:foreground "#00BBBB")))) + (font-lock-comment-face ((t (:foreground "grey50" :bold t :italic t)))) + (font-lock-string-face ((t (:foreground "#10D010")))) + (font-lock-constant-face ((t (:foreground "indian red")))) + (highlight-changes-face ((t (:background "navy")))) + (highlight-changes-delete-face ((t (:foreground "red" :background "navy")))) + (widget-field-face ((t (:foreground "black" :background "grey35")))) + (widget-inactive-face ((t (:foreground "gray")))) + (custom-button-face ((t (:foreground "yellow" :background "dark blue")))) + (custom-state-face ((t (:foreground "mediumaquamarine")))) + (custom-face-tag-face ((t (:foreground "goldenrod" :underline t)))) + (custom-documentation-face ((t (:foreground "#10D010")))) + (custom-set-face ((t (:foreground "#2020D0"))))))) + +(defun color-theme-ryerson () + "White on midnightblue scheme. +Used at Ryerson Polytechnic University in the Electronic Engineering department." + (interactive) + (color-theme-install + '(color-theme-ryerson + ((foreground-color . "white") + (background-color . "midnightblue") + (cursor-color . "red") + (background-mode . dark)) + (default ((t (nil)))) + (modeline ((t (:foreground "black" :background "slategray3")))) + (modeline-buffer-id ((t (:foreground "black" :background "slategray3")))) + (modeline-mousable ((t (:foreground "black" :background "slategray3")))) + (modeline-mousable-minor-mode ((t (:foreground "black" :background "slategray3")))) + (underline ((t (:underline t)))) + (region ((t (:foreground "black" :background "slategray3"))))))) + +(defun color-theme-wheat () + "Default colors on a wheat background. +Calls the standard color theme function `color-theme-standard' in order +to reset all faces." + (interactive) + (color-theme-standard) + (let ((color-theme-is-cumulative t)) + (color-theme-install + '(color-theme-wheat + ((background-color . "Wheat")))))) + +(defun color-theme-standard () + "Emacs default colors. +If you are missing standard faces in this theme, please notify the maintainer." + (interactive) + ;; Note that some of the things that make up a color theme are + ;; actually variable settings! + (color-theme-install + '(color-theme-standard + ((foreground-color . "black") + (background-color . "white") + (mouse-color . "black") + (cursor-color . "black") + (border-color . "black") + (background-mode . light)) + ((Man-overstrike-face . bold) + (Man-underline-face . underline) + (apropos-keybinding-face . underline) + (apropos-label-face . italic) + (apropos-match-face . secondary-selection) + (apropos-property-face . bold-italic) + (apropos-symbol-face . bold) + (goto-address-mail-face . italic) + (goto-address-mail-mouse-face . secondary-selection) + (goto-address-url-face . bold) + (goto-address-url-mouse-face . highlight) + (help-highlight-face . underline) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:bold t :italic t)))) + (calendar-today-face ((t (:underline t)))) + (cperl-array-face ((t (:foreground "Blue" :background "lightyellow2" :bold t)))) + (cperl-hash-face ((t (:foreground "Red" :background "lightyellow2" :bold t :italic t)))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:foreground "white" :background "blue")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:foreground "blue" :underline t)))) + (custom-group-tag-face-1 ((t (:foreground "red" :underline t)))) + (custom-invalid-face ((t (:foreground "yellow" :background "red")))) + (custom-modified-face ((t (:foreground "white" :background "blue")))) + (custom-rogue-face ((t (:foreground "pink" :background "black")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:foreground "blue" :background "white")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:bold t :underline t)))) + (custom-variable-tag-face ((t (:foreground "blue" :underline t)))) + (diary-face ((t (:foreground "red")))) + (ediff-current-diff-face-A ((t (:foreground "firebrick" :background "pale green")))) + (ediff-current-diff-face-Ancestor ((t (:foreground "Black" :background "VioletRed")))) + (ediff-current-diff-face-B ((t (:foreground "DarkOrchid" :background "Yellow")))) + (ediff-current-diff-face-C ((t (:foreground "Navy" :background "Pink")))) + (ediff-even-diff-face-A ((t (:foreground "Black" :background "light grey")))) + (ediff-even-diff-face-Ancestor ((t (:foreground "White" :background "Grey")))) + (ediff-even-diff-face-B ((t (:foreground "White" :background "Grey")))) + (ediff-even-diff-face-C ((t (:foreground "Black" :background "light grey")))) + (ediff-fine-diff-face-A ((t (:foreground "Navy" :background "sky blue")))) + (ediff-fine-diff-face-Ancestor ((t (:foreground "Black" :background "Green")))) + (ediff-fine-diff-face-B ((t (:foreground "Black" :background "cyan")))) + (ediff-fine-diff-face-C ((t (:foreground "Black" :background "Turquoise")))) + (ediff-odd-diff-face-A ((t (:foreground "White" :background "Grey")))) + (ediff-odd-diff-face-Ancestor ((t (:foreground "Black" :background "light grey")))) + (ediff-odd-diff-face-B ((t (:foreground "Black" :background "light grey")))) + (ediff-odd-diff-face-C ((t (:foreground "White" :background "Grey")))) + (eshell-ls-archive-face ((t (:foreground "Orchid" :bold t)))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:foreground "OrangeRed" :bold t)))) + (eshell-ls-directory-face ((t (:foreground "Blue" :bold t)))) + (eshell-ls-executable-face ((t (:foreground "ForestGreen" :bold t)))) + (eshell-ls-missing-face ((t (:foreground "Red" :bold t)))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:foreground "Magenta" :bold t)))) + (eshell-ls-symlink-face ((t (:foreground "DarkCyan" :bold t)))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:foreground "Red" :bold t)))) + (eshell-test-failed-face ((t (:foreground "OrangeRed" :bold t)))) + (eshell-test-ok-face ((t (:foreground "Green" :bold t)))) + (excerpt ((t (:italic t)))) + (fixed ((t (:bold t)))) + (flyspell-duplicate-face ((t (:foreground "Gold3" :bold t :underline t)))) + (flyspell-incorrect-face ((t (:foreground "OrangeRed" :bold t :underline t)))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:foreground "Firebrick")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-function-name-face ((t (:foreground "Blue")))) + (font-lock-keyword-face ((t (:foreground "Purple")))) + (font-lock-string-face ((t (:foreground "RosyBrown")))) + (font-lock-type-face ((t (:foreground "ForestGreen")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-warning-face ((t (:foreground "Red" :bold t)))) + (fringe ((t (:background "grey95")))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:bold t :italic t)))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t)))) + (gnus-emphasis-underline-bold-italic ((t (:bold t :italic t :underline t)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:foreground "DeepPink3" :bold t)))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:foreground "HotPink3" :bold t)))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:foreground "magenta4" :bold t)))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:foreground "DeepPink4" :bold t)))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:foreground "ForestGreen" :bold t)))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:foreground "CadetBlue4" :bold t)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:foreground "DarkGreen" :bold t)))) + (gnus-header-content-face ((t (:foreground "indianred4" :italic t)))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:foreground "MidnightBlue" :italic t)))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-signature-face ((t (:italic t)))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-summary-cancelled-face ((t (:foreground "yellow" :background "black")))) + (gnus-summary-high-ancient-face ((t (:foreground "RoyalBlue" :bold t)))) + (gnus-summary-high-read-face ((t (:foreground "DarkGreen" :bold t)))) + (gnus-summary-high-ticked-face ((t (:foreground "firebrick" :bold t)))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:foreground "RoyalBlue" :italic t)))) + (gnus-summary-low-read-face ((t (:foreground "DarkGreen" :italic t)))) + (gnus-summary-low-ticked-face ((t (:foreground "firebrick" :italic t)))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (highlight ((t (:background "darkseagreen2")))) + (highlight-changes-delete-face ((t (:foreground "red" :underline t)))) + (highlight-changes-face ((t (:foreground "red")))) + (highline-face ((t (:background "paleturquoise")))) + (holiday-face ((t (:background "pink")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:bold t :italic t)))) + (info-xref ((t (:bold t)))) + (italic ((t (:italic t)))) + (makefile-space-face ((t (:background "hotpink")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:foreground "blue4" :bold t :italic t)))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:foreground "navy blue" :bold t)))) + (message-header-to-face ((t (:foreground "MidnightBlue" :bold t)))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:foreground "white" :background "black")))) + (modeline-buffer-id ((t (:foreground "white" :background "black")))) + (modeline-mousable ((t (:foreground "white" :background "black")))) + (modeline-mousable-minor-mode ((t (:foreground "white" :background "black")))) + (region ((t (:background "gray")))) + (secondary-selection ((t (:background "paleturquoise")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:foreground "white" :background "purple")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "brown")))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (:background "black")))) + (term-blue ((t (:foreground "blue")))) + (term-bluebg ((t (:background "blue")))) + (term-bold ((t (:bold t)))) + (term-cyan ((t (:foreground "cyan")))) + (term-cyanbg ((t (:background "cyan")))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-green ((t (:foreground "green")))) + (term-greenbg ((t (:background "green")))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (:foreground "magenta")))) + (term-magentabg ((t (:background "magenta")))) + (term-red ((t (:foreground "red")))) + (term-redbg ((t (:background "red")))) + (term-underline ((t (:underline t)))) + (term-white ((t (:foreground "white")))) + (term-whitebg ((t (:background "white")))) + (term-yellow ((t (:foreground "yellow")))) + (term-yellowbg ((t (:background "yellow")))) + (underline ((t (:underline t)))) + (vcursor ((t (:foreground "blue" :background "cyan" :underline t)))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-prompt-face ((t (:foreground "Red" :bold t)))) + (vhdl-font-lock-reserved-words-face ((t (:foreground "Orange" :bold t)))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:foreground "Blue" :underline t)))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:foreground "DarkGoldenrod" :underline t)))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:foreground "ForestGreen" :underline t)))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:foreground "Brown" :underline t)))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:foreground "Grey50" :underline t)))) + (viper-minibuffer-emacs-face ((t (:foreground "Black" :background "darkseagreen2")))) + (viper-minibuffer-insert-face ((t (:foreground "Black" :background "pink")))) + (viper-minibuffer-vi-face ((t (:foreground "DarkGreen" :background "grey")))) + (viper-replace-overlay-face ((t (:foreground "Black" :background "darkseagreen2")))) + (viper-search-face ((t (:foreground "Black" :background "khaki")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85"))))))) + +(defun color-theme-fischmeister () + "The light colors on a grey blackground. +Sebastian Fischmeister " + (interactive) + (color-theme-install + '(color-theme-fischmeister + ((foreground-color . "black") + (background-color . "gray80") + (mouse-color . "red") + (cursor-color . "yellow") + (border-color . "black") + (background-mode . light)) + (default ((t (nil)))) + (modeline ((t (:foreground "gray80" :background "black")))) + (modeline-buffer-id ((t (:foreground "gray80" :background "black")))) + (modeline-mousable ((t (:foreground "gray80" :background "black")))) + (modeline-mousable-minor-mode ((t (:foreground "gray80" :background "black")))) + (highlight ((t (:background "darkseagreen2")))) + (bold ((t (:bold t)))) + (italic ((t (:italic t)))) + (bold-italic ((t (:bold t :italic t)))) + (region ((t (:background "gray")))) + (secondary-selection ((t (:background "paleturquoise")))) + (underline ((t (:underline t)))) + (show-paren-match-face ((t (:foreground "yellow" :background "darkgreen")))) + (show-paren-mismatch-face ((t (:foreground "white" :background "red")))) + (font-lock-comment-face ((t (:foreground "FireBrick" :bold t :italic t)))) + (font-lock-string-face ((t (:foreground "DarkSlateBlue" :italic t)))) + (font-lock-keyword-face ((t (:foreground "navy")))) + (font-lock-builtin-face ((t (:foreground "white")))) + (font-lock-function-name-face ((t (:foreground "Blue")))) + (font-lock-variable-name-face ((t (:foreground "Darkblue")))) + (font-lock-type-face ((t (:foreground "darkgreen")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-warning-face ((t (:foreground "Orchid" :bold t)))) + (font-lock-reference-face ((t (:foreground "SteelBlue"))))))) + +(defun color-theme-sitaramv-solaris () + "White on a midnight blue background. Lots of yellow and orange. +Includes faces for font-lock, widget, custom, speedbar, message, gnus, +eshell." + (interactive) + (color-theme-install + '(color-theme-sitaramv-solaris + ((foreground-color . "white") + (background-color . "MidnightBlue") + (mouse-color . "yellow") + (cursor-color . "magenta2") + (border-color . "black") + (background-mode . dark)) + (default ((t (nil)))) + (modeline ((t (:foreground "black" :background "gold2")))) + (modeline-buffer-id ((t (:foreground "black" :background "gold2")))) + (modeline-mousable ((t (:foreground "black" :background "gold2")))) + (modeline-mousable-minor-mode ((t (:foreground "black" :background "gold2")))) + (highlight ((t (:foreground "black" :background "Aquamarine")))) + (bold ((t (:bold t)))) + (italic ((t (:italic t)))) + (bold-italic ((t (:bold t :italic t)))) + (region ((t (:foreground "black" :background "snow3")))) + (secondary-selection ((t (:foreground "black" :background "aquamarine")))) + (underline ((t (:underline t)))) + (lazy-highlight-face ((t (:foreground "yellow")))) + (font-lock-comment-face ((t (:foreground "orange" :italic t)))) + (font-lock-string-face ((t (:foreground "orange")))) + (font-lock-keyword-face ((t (:foreground "green")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-function-name-face ((t (:foreground "cyan" :bold t)))) + (font-lock-variable-name-face ((t (:foreground "white")))) + (font-lock-type-face ((t (:foreground "cyan")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-warning-face ((t (:foreground "Pink" :bold t)))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-button-face ((t (:bold t)))) + (widget-field-face ((t (:background "dim gray")))) + (widget-single-line-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-button-pressed-face ((t (:foreground "red")))) + (custom-invalid-face ((t (:foreground "yellow" :background "red")))) + (custom-rogue-face ((t (:foreground "pink" :background "black")))) + (custom-modified-face ((t (:foreground "white" :background "blue")))) + (custom-set-face ((t (:foreground "blue" :background "white")))) + (custom-changed-face ((t (:foreground "white" :background "blue")))) + (custom-saved-face ((t (:underline t)))) + (custom-button-face ((t (nil)))) + (custom-documentation-face ((t (nil)))) + (custom-state-face ((t (:foreground "lime green")))) + (custom-variable-tag-face ((t (:foreground "light blue" :underline t)))) + (custom-variable-button-face ((t (:bold t :underline t)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face-1 ((t (:foreground "pink" :underline t)))) + (custom-group-tag-face ((t (:foreground "light blue" :underline t)))) + (speedbar-button-face ((t (:foreground "green3")))) + (speedbar-file-face ((t (:foreground "cyan")))) + (speedbar-directory-face ((t (:foreground "light blue")))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-highlight-face ((t (:background "sea green")))) + (font-lock-doc-string-face ((t (:foreground "Plum1" :bold t)))) + (font-lock-exit-face ((t (:foreground "green")))) + (ff-paths-non-existant-file-face ((t (:foreground "NavyBlue" :bold t)))) + (show-paren-match-face ((t (:background "red")))) + (show-paren-mismatch-face ((t (:foreground "white" :background "purple")))) + (message-header-to-face ((t (:foreground "green2" :bold t)))) + (message-header-cc-face ((t (:foreground "LightGoldenrod" :bold t)))) + (message-header-subject-face ((t (:foreground "green3")))) + (message-header-newsgroups-face ((t (:foreground "yellow" :bold t :italic t)))) + (message-header-other-face ((t (:foreground "Salmon")))) + (message-header-name-face ((t (:foreground "green3")))) + (message-header-xheader-face ((t (:foreground "GreenYellow")))) + (message-separator-face ((t (:foreground "Tan")))) + (message-cited-text-face ((t (:foreground "Gold")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:foreground "PaleTurquoise" :bold t)))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-2-face ((t (:foreground "turquoise" :bold t)))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-low-face ((t (:foreground "DarkTurquoise" :bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-mail-1-face ((t (:foreground "aquamarine1" :bold t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-2-face ((t (:foreground "aquamarine2" :bold t)))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-3-face ((t (:foreground "aquamarine3" :bold t)))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-low-face ((t (:foreground "aquamarine4" :bold t)))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-summary-cancelled-face ((t (:foreground "yellow" :background "black")))) + (gnus-summary-high-ticked-face ((t (:foreground "pink" :bold t)))) + (gnus-summary-low-ticked-face ((t (:foreground "pink" :italic t)))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-high-ancient-face ((t (:foreground "SkyBlue" :bold t)))) + (gnus-summary-low-ancient-face ((t (:foreground "SkyBlue" :italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-high-read-face ((t (:foreground "PaleGreen" :bold t)))) + (gnus-summary-low-read-face ((t (:foreground "PaleGreen" :italic t)))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-splash-face ((t (:foreground "Brown")))) + (eshell-ls-directory-face ((t (:foreground "SkyBlue" :bold t)))) + (eshell-ls-symlink-face ((t (:foreground "Cyan" :bold t)))) + (eshell-ls-executable-face ((t (:foreground "Green" :bold t)))) + (eshell-ls-readonly-face ((t (:foreground "Pink")))) + (eshell-ls-unreadable-face ((t (:foreground "DarkGrey")))) + (eshell-ls-special-face ((t (:foreground "Magenta" :bold t)))) + (eshell-ls-missing-face ((t (:foreground "Red" :bold t)))) + (eshell-ls-archive-face ((t (:foreground "Orchid" :bold t)))) + (eshell-ls-backup-face ((t (:foreground "LightSalmon")))) + (eshell-ls-product-face ((t (:foreground "LightSalmon")))) + (eshell-ls-clutter-face ((t (:foreground "OrangeRed" :bold t)))) + (eshell-prompt-face ((t (:foreground "Pink" :bold t)))) + (term-default-fg ((t (nil)))) + (term-default-bg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-bold ((t (:bold t)))) + (term-underline ((t (:underline t)))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-black ((t (:foreground "black")))) + (term-red ((t (:foreground "red")))) + (term-green ((t (:foreground "green")))) + (term-yellow ((t (:foreground "yellow")))) + (term-blue ((t (:foreground "blue")))) + (term-magenta ((t (:foreground "magenta")))) + (term-cyan ((t (:foreground "cyan")))) + (term-white ((t (:foreground "white")))) + (term-blackbg ((t (:background "black")))) + (term-redbg ((t (:background "red")))) + (term-greenbg ((t (:background "green")))) + (term-yellowbg ((t (:background "yellow")))) + (term-bluebg ((t (:background "blue")))) + (term-magentabg ((t (:background "magenta")))) + (term-cyanbg ((t (:background "cyan")))) + (term-whitebg ((t (:background "white")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t)))) + (gnus-emphasis-bold-italic ((t (:bold t :italic t)))) + (gnus-emphasis-underline-bold-italic ((t (:bold t :italic t :underline t)))) + (gnus-emphasis-highlight-words ((t (:foreground "yellow" :background "black")))) + (gnus-signature-face ((t (:italic t)))) + (gnus-header-from-face ((t (:foreground "spring green")))) + (gnus-header-subject-face ((t (:foreground "yellow" :bold t)))) + (gnus-header-newsgroups-face ((t (:foreground "SeaGreen3" :bold t :italic t)))) + (gnus-header-name-face ((t (:foreground "pink")))) + (gnus-header-content-face ((t (:foreground "lime green" :italic t)))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:foreground "light blue")))) + (gnus-cite-face-2 ((t (:foreground "light cyan")))) + (gnus-cite-face-3 ((t (:foreground "light yellow")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise"))))))) + +(defun color-theme-sitaramv-nt () + "Black foreground on white background. +Includes faces for font-lock, widget, custom, speedbar." + (interactive) + (color-theme-install + '(color-theme-sitaramv-nt + ((foreground-color . "black") + (background-color . "white") + (mouse-color . "sienna3") + (cursor-color . "HotPink") + (border-color . "Blue") + (background-mode . light)) + (default ((t (nil)))) + (modeline ((t (:foreground "black" :background "gold2")))) + (modeline-buffer-id ((t (:foreground "black" :background "gold2")))) + (modeline-mousable ((t (:foreground "black" :background "gold2")))) + (modeline-mousable-minor-mode ((t (:foreground "black" :background "gold2")))) + (highlight ((t (:foreground "black" :background "darkseagreen2")))) + (bold ((t (:bold t)))) + (italic ((t (:italic t)))) + (bold-italic ((t (:bold t :italic t)))) + (region ((t (:foreground "black" :background "snow3")))) + (secondary-selection ((t (:background "paleturquoise")))) + (underline ((t (:underline t)))) + (lazy-highlight-face ((t (:foreground "dark magenta" :bold t)))) + (font-lock-comment-face ((t (:foreground "ForestGreen" :italic t)))) + (font-lock-string-face ((t (:foreground "red")))) + (font-lock-keyword-face ((t (:foreground "blue" :bold t)))) + (font-lock-builtin-face ((t (:foreground "black")))) + (font-lock-function-name-face ((t (:foreground "dark magenta" :bold t)))) + (font-lock-variable-name-face ((t (:foreground "black")))) + (font-lock-type-face ((t (:foreground "blue")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-warning-face ((t (:foreground "Red" :bold t)))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-button-face ((t (:bold t)))) + (widget-field-face ((t (:background "gray85")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-button-pressed-face ((t (:foreground "red")))) + (custom-invalid-face ((t (:foreground "yellow" :background "red")))) + (custom-rogue-face ((t (:foreground "pink" :background "black")))) + (custom-modified-face ((t (:foreground "white" :background "blue")))) + (custom-set-face ((t (:foreground "blue" :background "white")))) + (custom-changed-face ((t (:foreground "white" :background "blue")))) + (custom-saved-face ((t (:underline t)))) + (custom-button-face ((t (nil)))) + (custom-documentation-face ((t (nil)))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-tag-face ((t (:foreground "blue" :underline t)))) + (custom-variable-button-face ((t (:bold t :underline t)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face-1 ((t (:foreground "red" :underline t)))) + (custom-group-tag-face ((t (:foreground "blue" :underline t)))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-highlight-face ((t (:background "green")))) + (ff-paths-non-existant-file-face ((t (:foreground "NavyBlue" :bold t)))) + (show-paren-match-face ((t (:background "light blue")))) + (show-paren-mismatch-face ((t (:foreground "white" :background "purple"))))))) + +(defun color-theme-billw () + "Cornsilk on black. +Includes info, diary, font-lock, eshell, sgml, message, gnus, +widget, custom, latex, ediff." + (interactive) + (color-theme-install + '(color-theme-billw + ((foreground-color . "cornsilk") + (background-color . "black") + (mouse-color . "black") + (cursor-color . "white") + (border-color . "black") + (background-mode . dark)) + (default ((t (nil)))) + (modeline ((t (:foreground "black" :background "wheat")))) + (modeline-buffer-id ((t (:foreground "black" :background "wheat")))) + (modeline-mousable ((t (:foreground "black" :background "wheat")))) + (modeline-mousable-minor-mode ((t (:foreground "black" :background "wheat")))) + (highlight ((t (:foreground "wheat" :background "darkslategray")))) + (bold ((t (:bold t)))) + (italic ((t (:italic t)))) + (bold-italic ((t (:bold t :italic t)))) + (region ((t (:background "dimgray")))) + (secondary-selection ((t (:background "deepskyblue4")))) + (underline ((t (:underline t)))) + (info-node ((t (:foreground "yellow" :bold t :italic t)))) + (info-menu-5 ((t (:underline t)))) + (info-xref ((t (:foreground "yellow" :bold t)))) + (diary-face ((t (:foreground "orange")))) + (calendar-today-face ((t (:underline t)))) + (holiday-face ((t (:background "red")))) + (show-paren-match-face ((t (:background "deepskyblue4")))) + (show-paren-mismatch-face ((t (:foreground "white" :background "red")))) + (font-lock-comment-face ((t (:foreground "gold")))) + (font-lock-string-face ((t (:foreground "orange")))) + (font-lock-keyword-face ((t (:foreground "cyan1")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-function-name-face ((t (:foreground "mediumspringgreen")))) + (font-lock-variable-name-face ((t (:foreground "light salmon")))) + (font-lock-type-face ((t (:foreground "yellow1")))) + (font-lock-constant-face ((t (:foreground "salmon")))) + (font-lock-warning-face ((t (:foreground "gold" :bold t)))) + (blank-space-face ((t (:background "LightGray")))) + (blank-tab-face ((t (:foreground "black" :background "cornsilk")))) + (highline-face ((t (:background "gray35")))) + (eshell-ls-directory-face ((t (:foreground "green" :bold t)))) + (eshell-ls-symlink-face ((t (:foreground "Cyan" :bold t)))) + (eshell-ls-executable-face ((t (:foreground "orange" :bold t)))) + (eshell-ls-readonly-face ((t (:foreground "gray")))) + (eshell-ls-unreadable-face ((t (:foreground "DarkGrey")))) + (eshell-ls-special-face ((t (:foreground "Magenta" :bold t)))) + (eshell-ls-missing-face ((t (:foreground "Red" :bold t)))) + (eshell-ls-archive-face ((t (:foreground "Orchid" :bold t)))) + (eshell-ls-backup-face ((t (:foreground "LightSalmon")))) + (eshell-ls-product-face ((t (:foreground "LightSalmon")))) + (eshell-ls-clutter-face ((t (:foreground "blue" :bold t)))) + (sgml-start-tag-face ((t (:foreground "mediumspringgreen")))) + (custom-button-face ((t (:foreground "white")))) + (sgml-ignored-face ((t (:foreground "gray20" :background "gray60")))) + (sgml-doctype-face ((t (:foreground "orange")))) + (sgml-sgml-face ((t (:foreground "yellow")))) + (vc-annotate-face-0046FF ((t (:foreground "wheat" :background "black")))) + (custom-documentation-face ((t (:foreground "white")))) + (sgml-end-tag-face ((t (:foreground "greenyellow")))) + (linemenu-face ((t (:background "gray30")))) + (sgml-entity-face ((t (:foreground "gold")))) + (message-header-to-face ((t (:foreground "floral white" :bold t)))) + (message-header-cc-face ((t (:foreground "ivory")))) + (message-header-subject-face ((t (:foreground "papaya whip" :bold t)))) + (message-header-newsgroups-face ((t (:foreground "lavender blush" :bold t :italic t)))) + (message-header-other-face ((t (:foreground "pale turquoise")))) + (message-header-name-face ((t (:foreground "light sky blue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-separator-face ((t (:foreground "sandy brown")))) + (message-cited-text-face ((t (:foreground "plum1")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:foreground "white" :bold t)))) + (gnus-group-news-1-empty-face ((t (:foreground "white")))) + (gnus-group-news-2-face ((t (:foreground "lightcyan" :bold t)))) + (gnus-group-news-2-empty-face ((t (:foreground "lightcyan")))) + (gnus-group-news-3-face ((t (:foreground "tan" :bold t)))) + (gnus-group-news-3-empty-face ((t (:foreground "tan")))) + (gnus-group-news-4-face ((t (:foreground "white" :bold t)))) + (gnus-group-news-4-empty-face ((t (:foreground "white")))) + (gnus-group-news-5-face ((t (:foreground "wheat" :bold t)))) + (gnus-group-news-5-empty-face ((t (:foreground "wheat")))) + (gnus-group-news-6-face ((t (:foreground "tan" :bold t)))) + (gnus-group-news-6-empty-face ((t (:foreground "tan")))) + (gnus-group-news-low-face ((t (:foreground "DarkTurquoise" :bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-mail-1-face ((t (:foreground "white" :bold t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "gray80")))) + (gnus-group-mail-2-face ((t (:foreground "lightcyan" :bold t)))) + (gnus-group-mail-2-empty-face ((t (:foreground "lightcyan")))) + (gnus-group-mail-3-face ((t (:foreground "tan" :bold t)))) + (gnus-group-mail-3-empty-face ((t (:foreground "tan")))) + (gnus-group-mail-low-face ((t (:foreground "aquamarine4" :bold t)))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-summary-selected-face ((t (:background "deepskyblue4" :underline t)))) + (gnus-summary-cancelled-face ((t (:foreground "black" :background "gray")))) + (gnus-summary-high-ticked-face ((t (:foreground "gray70" :bold t)))) + (gnus-summary-low-ticked-face ((t (:foreground "gray70" :bold t)))) + (gnus-summary-normal-ticked-face ((t (:foreground "gray70" :bold t)))) + (gnus-summary-high-ancient-face ((t (:foreground "SkyBlue" :bold t)))) + (gnus-summary-low-ancient-face ((t (:foreground "SkyBlue" :italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-high-read-face ((t (:foreground "PaleGreen" :bold t)))) + (gnus-summary-low-read-face ((t (:foreground "PaleGreen" :italic t)))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-splash-face ((t (:foreground "gold")))) + (font-latex-bold-face ((t (nil)))) + (font-latex-italic-face ((t (nil)))) + (font-latex-math-face ((t (nil)))) + (font-latex-sedate-face ((t (:foreground "Gray85")))) + (font-latex-string-face ((t (:foreground "orange")))) + (font-latex-warning-face ((t (:foreground "gold")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-button-face ((t (:bold t)))) + (widget-field-face ((t (:background "gray20")))) + (widget-single-line-field-face ((t (:background "gray20")))) + (widget-inactive-face ((t (:foreground "wheat")))) + (widget-button-pressed-face ((t (:foreground "red")))) + (custom-invalid-face ((t (:foreground "yellow" :background "red")))) + (custom-rogue-face ((t (:foreground "pink" :background "black")))) + (custom-modified-face ((t (:foreground "white" :background "blue")))) + (custom-set-face ((t (:foreground "blue")))) + (custom-changed-face ((t (:foreground "wheat" :background "skyblue")))) + (custom-saved-face ((t (:underline t)))) + (custom-state-face ((t (:foreground "light green")))) + (custom-variable-tag-face ((t (:foreground "skyblue" :underline t)))) + (custom-variable-button-face ((t (:bold t :underline t)))) + (custom-face-tag-face ((t (:foreground "white" :underline t)))) + (custom-group-tag-face-1 ((t (:foreground "pink" :underline t)))) + (custom-group-tag-face ((t (:foreground "skyblue" :underline t)))) + (swbuff-current-buffer-face ((t (:foreground "red" :bold t)))) + (ediff-current-diff-face-A ((t (:foreground "firebrick" :background "pale green")))) + (ediff-current-diff-face-B ((t (:foreground "DarkOrchid" :background "Yellow")))) + (ediff-current-diff-face-C ((t (:foreground "white" :background "indianred")))) + (ediff-current-diff-face-Ancestor ((t (:foreground "Black" :background "VioletRed")))) + (ediff-fine-diff-face-A ((t (:foreground "Navy" :background "sky blue")))) + (ediff-fine-diff-face-B ((t (:foreground "Black" :background "cyan")))) + (ediff-fine-diff-face-C ((t (:foreground "Black" :background "Turquoise")))) + (ediff-fine-diff-face-Ancestor ((t (:foreground "Black" :background "Green")))) + (ediff-even-diff-face-A ((t (:foreground "Black" :background "light grey")))) + (ediff-even-diff-face-B ((t (:foreground "White" :background "Grey")))) + (ediff-even-diff-face-C ((t (:foreground "Black" :background "light grey")))) + (ediff-even-diff-face-Ancestor ((t (:foreground "White" :background "Grey")))) + (ediff-odd-diff-face-A ((t (:foreground "White" :background "Grey")))) + (ediff-odd-diff-face-B ((t (:foreground "Black" :background "light grey")))) + (ediff-odd-diff-face-C ((t (:foreground "White" :background "Grey")))) + (ediff-odd-diff-face-Ancestor ((t (:foreground "Black" :background "light grey")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:foreground "white" :background "goldenrod4")))) + (gnus-emphasis-underline-bold ((t (:foreground "black" :background "yellow" :bold t :underline t)))) + (gnus-emphasis-underline-italic ((t (:foreground "black" :background "yellow" :italic t :underline t)))) + (gnus-emphasis-bold-italic ((t (:bold t :italic t)))) + (gnus-emphasis-underline-bold-italic ((t (:foreground "black" :background "yellow" :bold t :italic t :underline t)))) + (gnus-emphasis-highlight-words ((t (:foreground "yellow" :background "black")))) + (gnus-signature-face ((t (:italic t)))) + (gnus-header-from-face ((t (:foreground "wheat")))) + (gnus-header-subject-face ((t (:foreground "wheat" :bold t)))) + (gnus-header-newsgroups-face ((t (:foreground "wheat" :italic t)))) + (gnus-header-name-face ((t (:foreground "white")))) + (gnus-header-content-face ((t (:foreground "tan" :italic t)))) + (gnus-filterhist-face-1 ((t (nil)))) + (gnus-splash ((t (:foreground "Brown")))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:foreground "light blue")))) + (gnus-cite-face-2 ((t (:foreground "light cyan")))) + (gnus-cite-face-3 ((t (:foreground "light yellow")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise"))))))) + +(defun color-theme-retro-green (&optional color func) + "Plain green on black faces for those longing for the good old days." + (interactive) + ;; Build a list of faces without parameters + (let ((old-faces (face-list)) + (faces) + (face) + (foreground (or color "green"))) + (dolist (face old-faces) + (cond ((memq face '(bold bold-italic)) + (add-to-list 'faces `(,face (( t (:bold t)))))) + ((memq face '(italic underline show-paren-mismatch-face)) + (add-to-list 'faces `(,face (( t (:underline t)))))) + ((memq face '(modeline modeline-buffer-id modeline-mousable + modeline-mousable-minor-mode highlight region + secondary-selection show-paren-match-face)) + (add-to-list 'faces `(,face (( t (:foreground "black" + :background ,foreground + :inverse t)))))) + (t + (add-to-list 'faces `(,face (( t (nil)))))))) + (color-theme-install + (append + (list (or func 'color-theme-retro-green) + (list (cons 'foreground-color foreground) + (cons 'background-color "black") + (cons 'mouse-color foreground) + (cons 'cursor-color foreground) + (cons 'border-color foreground) + (cons 'background-mode 'dark))) + faces)))) + +(defun color-theme-retro-orange () + "Plain orange on black faces for those longing for the good old days." + (interactive) + (color-theme-retro-green "orange" 'color-theme-retro-orange)) + +(defun color-theme-subtle-hacker () + "Subtle Hacker Color Theme. +Based on gnome2, but uses white for important things like comments, +and less of the unreadable tomato. By Colin Walters " + (interactive) + (color-theme-gnome2) + (let ((color-theme-is-cumulative t)) + (color-theme-install + '(color-theme-subtle-hacker + nil + nil + (custom-state-face ((t (:foreground "Coral")))) + (diary-face ((t (:bold t :foreground "IndianRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "DimGray")))) + (eshell-ls-executable-face ((t (:bold t :foreground "Coral")))) + (eshell-ls-missing-face ((t (:bold t :foreground "black")))) + (eshell-ls-special-face ((t (:bold t :foreground "Gold")))) + (eshell-ls-symlink-face ((t (:bold t :foreground "White")))) + (font-lock-comment-face ((t (:foreground "White")))) + (font-lock-constant-face ((t (:bold t :foreground "Aquamarine")))) + (font-lock-function-name-face ((t (:bold t :foreground "MediumSlateBlue")))) + (font-lock-string-face ((t (:italic t :foreground "LightSalmon")))) + (font-lock-variable-name-face ((t (:italic t :bold t :foreground "Aquamarine")))) + (gnus-cite-face-1 ((t (:foreground "dark khaki")))) + (gnus-cite-face-2 ((t (:foreground "chocolate")))) + (gnus-cite-face-3 ((t (:foreground "tomato")))) + (gnus-group-mail-1-empty-face ((t (:foreground "light cyan")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "light cyan")))) + (gnus-group-mail-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "turquoise")))) + (gnus-group-mail-3-empty-face ((t (:foreground "tomato")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "tomato")))) + (gnus-group-mail-low-empty-face ((t (:foreground "dodger blue")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "dodger blue")))) + (gnus-group-news-1-empty-face ((t (:foreground "green yellow")))) + (gnus-group-news-1-face ((t (:bold t :foreground "green yellow")))) + (gnus-group-news-2-empty-face ((t (:foreground "dark orange")))) + (gnus-group-news-2-face ((t (:bold t :foreground "dark orange")))) + (gnus-group-news-3-empty-face ((t (:foreground "tomato")))) + (gnus-group-news-3-face ((t (:bold t :foreground "tomato")))) + (gnus-group-news-low-empty-face ((t (:foreground "yellow green")))) + (gnus-group-news-low-face ((t (:bold t :foreground "yellow green")))) + (gnus-header-name-face ((t (:bold t :foreground "DodgerBlue1")))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "LightSkyBlue3")))) + (gnus-signature-face ((t (:foreground "salmon")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "forest green")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "burlywood")))) + (gnus-summary-high-unread-face ((t (:italic t :bold t :foreground "cyan")))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "chocolate")))) + (gnus-summary-low-read-face ((t (:foreground "light sea green")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "chocolate")))) + (gnus-summary-low-unread-face ((t (:italic t :foreground "light sea green")))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "khaki")))) + (gnus-summary-normal-ticked-face ((t (:foreground "sandy brown")))) + (gnus-summary-normal-unread-face ((t (:foreground "aquamarine")))) + (message-cited-text-face ((t (:foreground "White")))) + (message-header-name-face ((t (:foreground "DodgerBlue1")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "LightSkyBlue3")))) + (message-header-other-face ((t (:foreground "LightSkyBlue3")))) + (message-header-xheader-face ((t (:foreground "DodgerBlue3")))))))) + +(defun color-theme-pok-wog () + "Low-contrast White-on-Gray by S.Pokrovsky. + +The following might be a good addition to your .Xdefaults file: + +Emacs.pane.menubar.background: darkGrey +Emacs.pane.menubar.foreground: black" + (interactive) + (color-theme-install + '(color-theme-pok-wog + ((foreground-color . "White") + (background-color . "DarkSlateGray") + (mouse-color . "gold") + (cursor-color . "Cyan") + (border-color . "black") + (background-mode . dark)) + (default ((t (nil)))) + (bold ((t (:bold t :foreground "Wheat")))) + (bold-italic ((t (:italic t :bold t :foreground "wheat")))) + (calendar-today-face ((t (:underline t :foreground "white")))) + (diary-face ((t (:foreground "red")))) + (font-lock-builtin-face ((t (:bold t :foreground "cyan")))) + (font-lock-comment-face ((t (:foreground "Gold")))) + (font-lock-constant-face ((t (:bold t :foreground "LightSteelBlue")))) + (font-lock-function-name-face ((t (:bold t :foreground "Yellow")))) + (font-lock-keyword-face ((t (:bold t :foreground "Cyan")))) + (font-lock-string-face ((t (:foreground "Khaki")))) + (font-lock-type-face ((t (:bold t :foreground "Cyan")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (gnus-cite-attribution-face ((t (:bold t :foreground "Wheat")))) + (gnus-cite-face-1 ((t (:foreground "wheat")))) + (gnus-cite-face-10 ((t (:foreground "wheat")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "cyan")))) + (gnus-cite-face-3 ((t (:foreground "light yellow")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :foreground "wheat")))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t :foreground "white")))) + (gnus-emphasis-underline ((t (:underline t :foreground "white")))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t :foreground "wheat")))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t :foreground "white")))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1")))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2")))) + (gnus-group-mail-3-empty-face ((t (:foreground "Salmon")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "gold")))) + (gnus-group-mail-low-empty-face ((t (:foreground "Wheat")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4")))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise")))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :foreground "Wheat")))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise")))) + (gnus-header-content-face ((t (:italic t :foreground "Wheat")))) + (gnus-header-from-face ((t (:foreground "light yellow")))) + (gnus-header-name-face ((t (:foreground "cyan")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "yellow")))) + (gnus-header-subject-face ((t (:bold t :foreground "Gold")))) + (gnus-signature-face ((t (:italic t :foreground "wheat")))) + (gnus-splash-face ((t (:foreground "orange")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "pink")))) + (gnus-summary-high-unread-face ((t (:bold t :foreground "gold")))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "pink")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (:foreground "wheat")))) + (gnus-summary-selected-face ((t (:underline t :foreground "white")))) + (highlight ((t (:background "Blue" :foreground "white")))) + (highline-face ((t (:background "black" :foreground "white")))) + (holiday-face ((t (:background "pink" :foreground "white")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t :foreground "white")))) + (info-xref ((t (:bold t :foreground "wheat")))) + (italic ((t (:italic t :foreground "white")))) + (makefile-space-face ((t (:background "hotpink")))) + (message-cited-text-face ((t (:foreground "green")))) + (message-header-cc-face ((t (:bold t :foreground "Aquamarine")))) + (message-header-name-face ((t (:foreground "Gold")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow")))) + (message-header-other-face ((t (:foreground "lightGray")))) + (message-header-subject-face ((t (:foreground "Yellow")))) + (message-header-to-face ((t (:bold t :foreground "green2")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:bold t :foreground "khaki")))) + (message-separator-face ((t (:background "aquamarine" :foreground "black")))) + (modeline ((t (:background "DarkGray" :foreground "Black")))) + (modeline-buffer-id ((t (:background "DarkGray" :foreground "Black")))) + (modeline-mousable ((t (:background "DarkGray" :foreground "Black")))) + (modeline-mousable-minor-mode ((t (:background "DarkGray" :foreground "Black")))) + (paren-mismatch-face ((t (:background "DeepPink" :foreground "white")))) + (paren-no-match-face ((t (:background "yellow" :foreground "white")))) + (region ((t (:background "MediumSlateBlue" :foreground "white")))) + (secondary-selection ((t (:background "Sienna" :foreground "white")))) + (show-paren-match-face ((t (:background "turquoise" :foreground "white")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:bold t :foreground "magenta")))) + (speedbar-directory-face ((t (:bold t :foreground "orchid")))) + (speedbar-file-face ((t (:foreground "pink")))) + (speedbar-highlight-face ((t (:background "black")))) + (speedbar-selected-face ((t (:underline t :foreground "cyan")))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (swbuff-current-buffer-face ((t (:bold t :foreground "red")))) + (underline ((t (:underline t :foreground "white")))) + (widget-button-face ((t (:bold t :foreground "wheat")))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray" :foreground "white")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray" :foreground "white"))))))) + +(defun color-theme-pok-wob () + "White-on-Black by S. Pokrovsky. + +The following might be a good addition to your .Xdefaults file: + +Emacs.pane.menubar.background: darkGrey +Emacs.pane.menubar.foreground: black" + (interactive) +; (setq term-default-fg-color "white" +; term-default-bg "black") + (color-theme-install + '(color-theme-pok-wob + ((foreground-color . "white") + (background-color . "black") + (mouse-color . "gold") + (cursor-color . "yellow") + (border-color . "black") + (background-mode . dark)) + (default ((t (nil)))) + (bold ((t (:bold t :foreground "light gray")))) + (bold-italic ((t (:italic t :bold t :foreground "cyan")))) + (calendar-today-face ((t (:underline t :foreground "white")))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t)))) + (custom-group-tag-face-1 ((t (:underline t)))) + (custom-invalid-face ((t (:background "red" :foreground "white")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (nil)))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t)))) + (diary-face ((t (:foreground "gold")))) + (font-lock-builtin-face ((t (:bold t :foreground "cyan")))) + (font-lock-comment-face ((t (:foreground "Gold")))) + (font-lock-constant-face ((t (:bold t :foreground "LightSteelBlue")))) + (font-lock-function-name-face ((t (:bold t :foreground "gold")))) + (font-lock-keyword-face ((t (:bold t :foreground "Cyan")))) + (font-lock-string-face ((t (:foreground "Khaki")))) + (font-lock-type-face ((t (:bold t :foreground "Cyan")))) + (font-lock-variable-name-face ((t (:italic t :foreground "gold")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (gnus-cite-attribution-face ((t (:underline t :foreground "beige")))) + (gnus-cite-face-1 ((t (:foreground "gold")))) + (gnus-cite-face-10 ((t (:foreground "coral")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "wheat")))) + (gnus-cite-face-3 ((t (:foreground "light pink")))) + (gnus-cite-face-4 ((t (:foreground "khaki")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :foreground "light gray")))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :foreground "cyan")))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "gold")))) + (gnus-emphasis-italic ((t (:italic t :foreground "cyan")))) + (gnus-emphasis-underline ((t (:underline t :foreground "white")))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t :foreground "white")))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t :foreground "white")))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t :foreground "white")))) + (gnus-group-mail-1-empty-face ((t (:foreground "Magenta")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "Magenta")))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2")))) + (gnus-group-mail-3-empty-face ((t (:foreground "Cyan")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "Cyan")))) + (gnus-group-mail-low-empty-face ((t (:foreground "Wheat")))) + (gnus-group-mail-low-face ((t (:foreground "aquamarine4")))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise")))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise")))) + (gnus-group-news-3-empty-face ((t (:foreground "wheat")))) + (gnus-group-news-3-face ((t (:bold t :foreground "Wheat")))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-low-face ((t (:bold t :foreground "MediumAquamarine")))) + (gnus-header-content-face ((t (:italic t :foreground "Wheat")))) + (gnus-header-from-face ((t (:foreground "light yellow")))) + (gnus-header-name-face ((t (:foreground "Wheat")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "gold")))) + (gnus-header-subject-face ((t (:bold t :foreground "Gold")))) + (gnus-signature-face ((t (:italic t :foreground "white")))) + (gnus-splash-face ((t (:foreground "orange")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "orange")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "red")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "coral")))) + (gnus-summary-high-unread-face ((t (:bold t :foreground "gold")))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "red")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "coral")))) + (gnus-summary-low-unread-face ((t (:italic t :foreground "white")))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (:foreground "white")))) + (gnus-summary-selected-face ((t (:underline t :foreground "white")))) + (highlight ((t (:background "Blue" :foreground "white")))) + (highline-face ((t (:background "dark slate gray" :foreground "white")))) + (holiday-face ((t (:background "red" :foreground "white")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t :foreground "white")))) + (info-xref ((t (:bold t :foreground "light gray")))) + (italic ((t (:italic t :foreground "cyan")))) + (makefile-space-face ((t (:background "hotpink" :foreground "white")))) + (message-cited-text-face ((t (:foreground "green")))) + (message-header-cc-face ((t (:bold t :foreground "Aquamarine")))) + (message-header-name-face ((t (:foreground "Gold")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "gold")))) + (message-header-other-face ((t (:foreground "lightGray")))) + (message-header-subject-face ((t (:foreground "Yellow")))) + (message-header-to-face ((t (:bold t :foreground "green2")))) + (message-header-xheader-face ((t (:foreground "sky blue")))) + (message-mml-face ((t (:bold t :foreground "khaki")))) + (message-separator-face ((t (:background "aquamarine" :foreground "black")))) + (modeline ((t (:background "dark gray" :foreground "black")))) + (modeline-buffer-id ((t (:background "dark gray" :foreground "black")))) + (modeline-mousable ((t (:background "dark gray" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "dark gray" :foreground "black")))) + (paren-mismatch-face ((t (:bold t :background "white" :foreground "red")))) + (paren-no-match-face ((t (:bold t :background "white" :foreground "red")))) + (region ((t (:background "MediumSlateBlue" :foreground "white")))) + (secondary-selection ((t (:background "Sienna" :foreground "white")))) + (show-paren-match-face ((t (:background "purple" :foreground "white")))) + (show-paren-mismatch-face ((t (:bold t :background "white" :foreground "red")))) + (speedbar-button-face ((t (nil)))) + (speedbar-directory-face ((t (nil)))) + (speedbar-file-face ((t (:bold t)))) + (speedbar-highlight-face ((t (nil)))) + (speedbar-selected-face ((t (:underline t)))) + (speedbar-tag-face ((t (nil)))) + (swbuff-current-buffer-face ((t (:bold t :foreground "red")))) + (underline ((t (:underline t :foreground "white")))) + (widget-button-face ((t (:bold t :foreground "coral")))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray" :foreground "white")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray" :foreground "white"))))))) + +(defun color-theme-blue-sea () + "The grey on midnight blue theme. + +Includes faces for apropos, font-lock (Emacs and XEmacs), speedbar, +custom, widget, info, flyspell, gnus, message, man, woman, dired. + +This is what you should put in your .Xdefaults file, if you want to +change the colors of the menus: + +emacs*Background: DarkSlateGray +emacs*Foreground: Wheat" + (interactive) + (color-theme-blue-gnus) + (let ((color-theme-is-cumulative t)) + (color-theme-blue-erc) + (color-theme-install + '(color-theme-blue-sea + ((background-color . "MidnightBlue") + (background-mode . dark) + (border-color . "Grey") + (cursor-color . "Grey") + (foreground-color . "Grey") + (mouse-color . "Grey")) + ((Man-overstrike-face . woman-bold-face) + (Man-underline-face . woman-italic-face)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:bold t :foreground "beige")))) + (calendar-today-face ((t (:underline t)))) + (cperl-array-face ((t (:foreground "light salmon" :bold t)))) + (cperl-hash-face ((t (:foreground "beige" :bold t :italic t)))) + (cperl-nonoverridable-face ((t (:foreground "aquamarine")))) + (custom-button-face ((t (:foreground "gainsboro")))) + (custom-changed-face ((t (:foreground "white" :background "blue")))) + (custom-documentation-face ((t (:foreground "light blue")))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:foreground "pale turquoise" :bold t)))) + (custom-group-tag-face-1 ((t (:foreground "pale turquoise" :underline t)))) + (custom-invalid-face ((t (:foreground "yellow" :background "red")))) + (custom-modified-face ((t (:foreground "white" :background "blue")))) + (custom-rogue-face ((t (:foreground "pink" :background "black")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:foreground "blue" :background "white")))) + (custom-state-face ((t (:foreground "light salmon")))) + (custom-variable-button-face ((t (:bold t :underline t)))) + (custom-variable-tag-face ((t (:foreground "turquoise" :bold t)))) + (diary-face ((t (:foreground "red")))) + (dired-face-directory ((t (:bold t :foreground "sky blue")))) + (dired-face-permissions ((t (:foreground "aquamarine")))) + (dired-face-flagged ((t (:foreground "tomato")))) + (dired-face-marked ((t (:foreground "light salmon")))) + (dired-face-executable ((t (:foreground "green yellow")))) + (eshell-ls-archive-face ((t (:bold t :foreground "medium purple")))) + (eshell-ls-backup-face ((t (:foreground "dim gray")))) + (eshell-ls-clutter-face ((t (:foreground "dim gray")))) + (eshell-ls-directory-face ((t (:bold t :foreground "medium slate blue")))) + (eshell-ls-executable-face ((t (:bold t :foreground "aquamarine")))) + (eshell-ls-missing-face ((t (:foreground "black")))) + (eshell-ls-picture-face ((t (:foreground "violet")))) + (eshell-ls-product-face ((t (:foreground "light steel blue")))) + (eshell-ls-readonly-face ((t (:foreground "aquamarine")))) + (eshell-ls-special-face ((t (:foreground "gold")))) + (eshell-ls-symlink-face ((t (:foreground "white")))) + (eshell-ls-unreadable-face ((t (:foreground "dim gray")))) + (eshell-prompt-face ((t (:foreground "light sky blue" :bold t)))) + (excerpt ((t (:italic t)))) + (fixed ((t (:bold t)))) + (flyspell-duplicate-face ((t (:foreground "Gold3" :bold t :underline t)))) + (flyspell-incorrect-face ((t (:foreground "OrangeRed" :bold t :underline t)))) + (font-lock-builtin-face ((t (:foreground "aquamarine")))) + (font-lock-comment-face ((t (:foreground "light blue")))) + (font-lock-constant-face ((t (:foreground "pale green")))) + (font-lock-doc-string-face ((t (:foreground "sky blue")))) + (font-lock-function-name-face ((t (:bold t :foreground "aquamarine")))) + (font-lock-keyword-face ((t (:foreground "pale turquoise" :bold t)))) + (font-lock-reference-face ((t (:foreground "pale green")))) + (font-lock-string-face ((t (:foreground "light sky blue")))) + (font-lock-type-face ((t (:foreground "sky blue" :bold t)))) + (font-lock-variable-name-face ((t (:foreground "turquoise" :bold t)))) + (font-lock-warning-face ((t (:foreground "Red" :bold t)))) + (fringe ((t (:background "MidnightBlue")))) + (header-line ((t (:background "#002" :foreground "cornflower blue")))) + (highlight ((t (:background "dark slate blue" :foreground "light blue")))) + (highline-face ((t (:background "DeepSkyBlue4")))) + (holiday-face ((t (:background "pink")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:bold t)))) + (info-xref ((t (:bold t :foreground "sky blue")))) + (isearch ((t (:background "slate blue")))) + (italic ((t (:foreground "sky blue")))) + (makefile-space-face ((t (:background "hotpink")))) + (menu ((t (:background "MidnightBlue" :foreground "Grey")))) + (modeline ((t (:foreground "wheat" :background "slate blue")))) + (mode-line-inactive ((t (:background "dark slate blue" :foreground "wheat")))) + (modeline-buffer-id ((t (:foreground "beige" :background "slate blue")))) + (modeline-mousable ((t (:foreground "light cyan" :background "slate blue")))) + (modeline-mousable-minor-mode ((t (:foreground "wheat" :background "slate blue")))) + (region ((t (:background "DarkSlateBlue")))) + (secondary-selection ((t (:background "steel blue")))) + (show-paren-match-face ((t (:foreground "white" :background "light slate blue")))) + (show-paren-mismatch-face ((t (:foreground "white" :background "red")))) + (speedbar-button-face ((t (:foreground "seashell2")))) + (speedbar-directory-face ((t (:foreground "seashell3")))) + (speedbar-file-face ((t (:foreground "seashell4")))) + (speedbar-highlight-face ((t (:background "dark slate blue" :foreground "wheat")))) + (speedbar-selected-face ((t (:foreground "seashell1" :underline t)))) + (speedbar-tag-face ((t (:foreground "antique white")))) + (tool-bar ((t (:background "MidnightBlue" :foreground "Grey" :box (:line-width 1 :style released-button))))) + (underline ((t (:underline t)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "light blue")))) + (widget-field-face ((t (:background "RoyalBlue4" :foreground "wheat")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "slate blue" :foreground "wheat")))) + (woman-bold-face ((t (:foreground "sky blue" :bold t)))) + (woman-italic-face ((t (:foreground "deep sky blue")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))) + (zmacs-region ((t (:background "DarkSlateBlue")))))))) + +(defun color-theme-rotor () + "Black on Beige color theme by Jinwei Shen, created 2000-06-08. +Supports default faces, font-lock, custom, widget, message, man, +show-paren, viper." + (interactive) + (color-theme-install + '(color-theme-rotor + ((background-color . "Beige") + (background-mode . light) + (border-color . "black") + (cursor-color . "Maroon") + (foreground-color . "Black") + (mouse-color . "Black")) + ((Man-overstrike-face . font-lock-function-name-face) + (Man-underline-face . font-lock-type-face) + (list-matching-lines-face . bold) + (rmail-highlight-face . font-lock-function-name-face) + (watson-attribution-face . italic) + (watson-url-face . bold) + (watson-url-mouse-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t :background "grey40" :foreground "yellow")))) + (bold-italic ((t (:italic t :bold t :foreground "yellow green")))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:foreground "MediumBlue")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-function-name-face ((t (:foreground "MediumSlateBlue")))) + (font-lock-keyword-face ((t (:foreground "#80a0ff")))) + (font-lock-string-face ((t (:foreground "red")))) + (font-lock-type-face ((t (:foreground "ForestGreen")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (highlight ((t (:background "PaleGreen" :foreground "black")))) + (italic ((t (:italic t :foreground "yellow3")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "wheat" :foreground "DarkOliveGreen")))) + (modeline-buffer-id ((t (:background "wheat" :foreground "DarkOliveGreen")))) + (modeline-mousable ((t (:background "wheat" :foreground "DarkOliveGreen")))) + (modeline-mousable-minor-mode ((t (:background "wheat" :foreground "DarkOliveGreen")))) + (nil ((t (nil)))) + (region ((t (:background "dark cyan" :foreground "cyan")))) + (secondary-selection ((t (:background "Turquoise" :foreground "black")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (underline ((t (:underline t)))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85"))))))) + +(defun color-theme-pierson () + "Black on White color theme by Dan L. Pierson, created 2000-06-08. +Supports default faces, font-lock, show-paren." + (interactive) + (color-theme-install + '(color-theme-pierson + ((background-color . "AntiqueWhite") + (background-mode . light) + (border-color . "black") + (cursor-color . "Orchid") + (foreground-color . "black") + (mouse-color . "Orchid")) + ((list-matching-lines-face . bold)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:foreground "ForestGreen")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-function-name-face ((t (:foreground "blue3")))) + (font-lock-keyword-face ((t (:foreground "Blue")))) + (font-lock-string-face ((t (:foreground "Firebrick")))) + (font-lock-type-face ((t (:foreground "Purple")))) + (font-lock-variable-name-face ((t (:foreground "blue3")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (highlight ((t (:background "darkseagreen2")))) + (italic ((t (:italic t)))) + (modeline ((t (:foreground "antiquewhite" :background "black")))) + (modeline-mousable-minor-mode ((t (:foreground "antiquewhite" :background "black")))) + (modeline-mousable ((t (:foreground "antiquewhite" :background "black")))) + (modeline-buffer-id ((t (:foreground "antiquewhite" :background "black")))) + (region ((t (:background "gray")))) + (secondary-selection ((t (:background "paleturquoise")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (underline ((t (:underline t))))))) + +(defun color-theme-xemacs () + "XEmacs standard colors. +If you are missing standard faces in this theme, please notify the maintainer. +Currently, this theme includes the standard faces and font-lock faces, including +some faces used in Emacs only but which are needed to recreate the look of the +XEmacs color theme." + (interactive) + (color-theme-install + '(color-theme-xemacs + ((background-color . "gray80") + (background-mode . light) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (cursor-color . "Red3") + (foreground-color . "black") + (top-toolbar-shadow-color . "#fffffbeeffff")) + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (nil)))) + (custom-button-face ((t (:bold t)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t)))) + (dired-face-executable ((t (:foreground "SeaGreen")))) + (dired-face-flagged ((t (:background "LightSlateGray")))) + (dired-face-marked ((t (:background "PaleVioletRed")))) + (dired-face-permissions ((t (:background "grey75" :foreground "black")))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (dired-face-symlink ((t (:foreground "cyan")))) + (font-lock-builtin-face ((t (:foreground "red3")))) + (font-lock-comment-face ((t (:foreground "blue4")))) + (font-lock-constant-face ((t (:foreground "red3")))) + (font-lock-doc-string-face ((t (:foreground "green4")))) + (font-lock-function-name-face ((t (:foreground "brown4")))) + (font-lock-keyword-face ((t (:foreground "red4")))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:foreground "green4")))) + (font-lock-type-face ((t (:foreground "steelblue")))) + (font-lock-variable-name-face ((t (:foreground "magenta4")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:background "Gray80")))) + (highlight ((t (:background "darkseagreen2")))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (isearch ((t (:background "paleturquoise")))) + (italic ((t (:italic t)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68")))) + (modeline ((t (:background "Gray80")))) + (modeline-buffer-id ((t (:background "Gray80" :foreground "blue4")))) + (modeline-mousable ((t (:background "Gray80" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "Gray80" :foreground "green4")))) + (paren-blink-off ((t (:foreground "gray80")))) + (paren-match ((t (:background "darkseagreen2")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "black")))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "gray65")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (text-cursor ((t (:background "Red3" :foreground "gray80")))) + (toolbar ((t (:background "Gray80")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (:background "Gray80")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "gray65"))))))) + +(defun color-theme-jsc-light () + "Color theme by John S Cooper, created 2000-06-08." + (interactive) + (color-theme-install + '(color-theme-jsc-light + ((background-color . "white") + (background-mode . light) + (border-color . "black") + (cursor-color . "Red") + (foreground-color . "black") + (mouse-color . "black")) + ((gnus-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t :foreground "red3")))) + (bold-italic ((t (:italic t :bold t :foreground "red")))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:italic t :bold t :foreground "Red3")))) + (font-lock-constant-face ((t (:foreground "navy")))) + (font-lock-function-name-face ((t (:bold t :foreground "Blue")))) + (font-lock-keyword-face ((t (:bold t :foreground "Purple")))) + (font-lock-string-face ((t (:foreground "Green4")))) + (font-lock-type-face ((t (:foreground "Navy")))) + (font-lock-variable-name-face ((t (:foreground "Tan4")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "blue2")))) + (gnus-group-news-1-face ((t (:bold t :foreground "blue2")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:italic t :foreground "blue")))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "red3")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:bold t :foreground "red")))) + (gnus-signature-face ((t (:foreground "pink")))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "navy")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:bold t :foreground "blue")))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "red3")))) + (gnus-summary-normal-ticked-face ((t (:foreground "black")))) + (gnus-summary-normal-unread-face ((t (:bold t :foreground "red3")))) + (gnus-summary-selected-face ((t (:underline t)))) + (highlight ((t (:background "antiquewhite" :foreground "blue")))) + (italic ((t (:italic t)))) + (makefile-space-face ((t (:background "hotpink")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "plum" :foreground "black")))) + (modeline-buffer-id ((t (:background "plum" :foreground "black")))) + (modeline-mousable ((t (:background "plum" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "plum" :foreground "black")))) + (region ((t (:background "plum")))) + (secondary-selection ((t (:background "palegreen")))) + (show-paren-match-face ((t (:background "plum")))) + (show-paren-mismatch-face ((t (:background "navy" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (underline ((t (:underline t)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85"))))))) + +(defun color-theme-jsc-dark () + "Color theme by John S Cooper, created 2000-06-11." + (interactive) + (color-theme-install + '(color-theme-jsc-dark + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "white") + (foreground-color . "cornsilk") + (mouse-color . "black")) + ((gnus-mouse-face . highlight) + (goto-address-mail-face . italic) + (goto-address-mail-mouse-face . secondary-selection) + (goto-address-url-face . bold) + (goto-address-url-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (blank-space-face ((t (:background "LightGray")))) + (blank-tab-face ((t (:background "cornsilk" :foreground "black")))) + (default ((t (nil)))) + (bold ((t (:bold t :foreground "white")))) + (bold-italic ((t (:italic t :bold t)))) + (calendar-today-face ((t (:underline t)))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue")))) + (cperl-hash-face ((t (:italic t :bold t :background "lightyellow2" :foreground "Red")))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (custom-button-face ((t (:foreground "white")))) + (custom-changed-face ((t (:background "skyblue" :foreground "wheat")))) + (custom-documentation-face ((t (:foreground "white")))) + (custom-face-tag-face ((t (:underline t :foreground "white")))) + (custom-group-tag-face ((t (:underline t :foreground "skyblue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "pink")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:foreground "blue")))) + (custom-state-face ((t (:foreground "light green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "skyblue")))) + (diary-face ((t (:bold t :foreground "orange")))) + (font-lock-builtin-face ((t (:bold t :foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:italic t :foreground "red")))) + (font-lock-constant-face ((t (:bold t :foreground "salmon")))) + (font-lock-function-name-face ((t (:bold t :foreground "orange")))) + (font-lock-keyword-face ((t (:bold t :foreground "gold")))) + (font-lock-string-face ((t (:italic t :foreground "orange")))) + (font-lock-type-face ((t (:bold t :foreground "gold")))) + (font-lock-variable-name-face ((t (:italic t :bold t :foreground "light salmon")))) + (font-lock-warning-face ((t (:bold t :foreground "gold")))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:foreground "light cyan")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "light blue")))) + (gnus-cite-face-3 ((t (:foreground "light yellow")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:background "goldenrod4" :foreground "white")))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t :background "yellow" :foreground "black")))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t :background "yellow" :foreground "black")))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t :background "yellow" :foreground "black")))) + (gnus-filterhist-face-1 ((t (nil)))) + (gnus-group-mail-1-empty-face ((t (:foreground "gray80")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "white")))) + (gnus-group-mail-2-empty-face ((t (:foreground "lightcyan")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "lightcyan")))) + (gnus-group-mail-3-empty-face ((t (:foreground "tan")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "tan")))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4")))) + (gnus-group-news-1-empty-face ((t (:foreground "white")))) + (gnus-group-news-1-face ((t (:bold t :foreground "white")))) + (gnus-group-news-2-empty-face ((t (:foreground "lightcyan")))) + (gnus-group-news-2-face ((t (:bold t :foreground "lightcyan")))) + (gnus-group-news-3-empty-face ((t (:foreground "tan")))) + (gnus-group-news-3-face ((t (:bold t :foreground "tan")))) + (gnus-group-news-4-empty-face ((t (:foreground "white")))) + (gnus-group-news-4-face ((t (:bold t :foreground "white")))) + (gnus-group-news-5-empty-face ((t (:foreground "wheat")))) + (gnus-group-news-5-face ((t (:bold t :foreground "wheat")))) + (gnus-group-news-6-empty-face ((t (:foreground "tan")))) + (gnus-group-news-6-face ((t (:bold t :foreground "tan")))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise")))) + (gnus-header-content-face ((t (:italic t :foreground "plum1")))) + (gnus-header-from-face ((t (:bold t :foreground "wheat")))) + (gnus-header-name-face ((t (:bold t :foreground "gold")))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "wheat")))) + (gnus-header-subject-face ((t (:bold t :foreground "red")))) + (gnus-signature-face ((t (:italic t :foreground "maroon")))) + (gnus-splash ((t (:foreground "Brown")))) + (gnus-splash-face ((t (:foreground "gold")))) + (gnus-summary-cancelled-face ((t (:background "gray" :foreground "black")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "gray70")))) + (gnus-summary-high-unread-face ((t (:italic t :bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :bold t :foreground "gray70")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:bold t :foreground "gray70")))) + (gnus-summary-normal-unread-face ((t (:bold t)))) + (gnus-summary-selected-face ((t (:underline t :background "deepskyblue4")))) + (highlight ((t (:background "darkslategray" :foreground "wheat")))) + (highlight-changes-delete-face ((t (:underline t :foreground "red")))) + (highlight-changes-face ((t (:foreground "red")))) + (highline-face ((t (:background "gray35")))) + (holiday-face ((t (:background "red")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t :foreground "yellow")))) + (info-xref ((t (:bold t :foreground "plum")))) + (italic ((t (:italic t)))) + (lazy-highlight-face ((t (:bold t :foreground "dark magenta")))) + (linemenu-face ((t (:background "gray30")))) + (makefile-space-face ((t (:background "hotpink")))) + (message-cited-text-face ((t (:foreground "plum1")))) + (message-header-cc-face ((t (:bold t :foreground "ivory")))) + (message-header-name-face ((t (:foreground "light sky blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "lavender blush")))) + (message-header-other-face ((t (:foreground "pale turquoise")))) + (message-header-subject-face ((t (:bold t :foreground "papaya whip")))) + (message-header-to-face ((t (:bold t :foreground "floral white")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:bold t :foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "sandy brown")))) + (modeline ((t (:background "tan" :foreground "black")))) + (modeline-buffer-id ((t (:background "tan" :foreground "black")))) + (modeline-mousable ((t (:background "tan" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "tan" :foreground "black")))) + (paren-mismatch-face ((t (:bold t :background "white" :foreground "red")))) + (paren-no-match-face ((t (:bold t :background "white" :foreground "red")))) + (region ((t (:background "slategrey")))) + (secondary-selection ((t (:background "deepskyblue4")))) + (sgml-doctype-face ((t (:foreground "orange")))) + (sgml-end-tag-face ((t (:foreground "greenyellow")))) + (sgml-entity-face ((t (:foreground "gold")))) + (sgml-ignored-face ((t (:background "gray60" :foreground "gray20")))) + (sgml-sgml-face ((t (:foreground "yellow")))) + (sgml-start-tag-face ((t (:foreground "mediumspringgreen")))) + (show-paren-match-face ((t (:background "deepskyblue4")))) + (show-paren-mismatch-face ((t (:bold t :background "red" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:bold t :foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (underline ((t (:underline t)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "gray20")))) + (widget-inactive-face ((t (:foreground "wheat")))) + (widget-single-line-field-face ((t (:background "gray20")))) + (woman-bold-face ((t (:bold t)))) + (woman-italic-face ((t (:foreground "beige")))) + (woman-unknown-face ((t (:foreground "LightSalmon"))))))) + +(defun color-theme-greiner () + "Color theme by Kevin Greiner, created 2000-06-13. +Black on Beige, supports default, font-lock, speedbar, custom, widget +faces. Designed to be easy on the eyes, particularly on Win32 +computers which commonly have white window backgrounds." + (interactive) + (color-theme-install + '(color-theme-greiner + ((background-color . "beige") + (background-mode . light) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "black") + (mouse-color . "black")) + ((list-matching-lines-face . bold)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (font-lock-builtin-face ((t (:foreground "blue4")))) + (font-lock-comment-face ((t (:foreground "Firebrick")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-function-name-face ((t (:foreground "Blue")))) + (font-lock-keyword-face ((t (:foreground "royal blue")))) + (font-lock-string-face ((t (:foreground "RosyBrown")))) + (font-lock-type-face ((t (:foreground "ForestGreen")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (highlight ((t (:background "darkseagreen2")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (italic ((t (:italic t)))) + (modeline ((t (:background "black" :foreground "white")))) + (modeline-mousable-minor-mode ((t (:background "black" :foreground "white")))) + (modeline-mousable ((t (:background "black" :foreground "white")))) + (modeline-buffer-id ((t (:background "black" :foreground "white")))) + (region ((t (:background "gray")))) + (secondary-selection ((t (:background "paleturquoise")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (underline ((t (:underline t)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85"))))))) + +(defun color-theme-jb-simple () + "Color theme by jeff, created 2000-06-14. +Uses white background and bold for many things" + (interactive) + (color-theme-install + '(color-theme-jb-simple + ((background-color . "white") + (background-mode . light) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "black") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (cursor-color . "black") + (foreground-color . "black") + (mouse-color . "black") + (top-toolbar-shadow-color . "#fffffbeeffff")) + ((gnus-mouse-face . highlight) + (list-matching-lines-face . bold) + (rmail-highlight-face . font-lock-function-name-face) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (blank-space-face ((t (nil)))) + (blank-tab-face ((t (nil)))) + (blue ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (nil)))) + (calendar-today-face ((t (:underline t)))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue")))) + (cperl-hash-face ((t (:italic t :bold t :background "lightyellow2" :foreground "Red")))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (custom-button-face ((t (:bold t)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :bold t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :bold t :foreground "blue")))) + (diary-face ((t (:bold t :foreground "red")))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (erc-action-face ((t (:bold t)))) + (erc-bold-face ((t (:bold t)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (nil)))) + (erc-error-face ((t (:bold t)))) + (erc-input-face ((t (nil)))) + (erc-inverse-face ((t (nil)))) + (erc-notice-face ((t (nil)))) + (erc-pal-face ((t (nil)))) + (erc-prompt-face ((t (nil)))) + (erc-underline-face ((t (nil)))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid")))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-ls-directory-face ((t (:bold t :foreground "Blue")))) + (eshell-ls-executable-face ((t (:bold t :foreground "ForestGreen")))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red")))) + (eshell-ls-picture-face ((t (nil)))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta")))) + (eshell-ls-symlink-face ((t (:bold t :foreground "DarkCyan")))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:bold t :foreground "Red")))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-test-ok-face ((t (:bold t :foreground "Green")))) + (excerpt ((t (:italic t)))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "NavyBlue")))) + (fixed ((t (:bold t)))) + (flyspell-duplicate-face ((t (:underline t :bold t :foreground "Gold3")))) + (flyspell-incorrect-face ((t (:underline t :bold t :foreground "OrangeRed")))) + (font-latex-bold-face ((t (nil)))) + (font-latex-italic-face ((t (nil)))) + (font-latex-math-face ((t (nil)))) + (font-latex-sedate-face ((t (nil)))) + (font-latex-string-face ((t (nil)))) + (font-latex-warning-face ((t (nil)))) + (font-lock-builtin-face ((t (:bold t :foreground "Orchid")))) + (font-lock-comment-face ((t (:italic t :bold t :foreground "blue4")))) + (font-lock-constant-face ((t (:bold t :foreground "CadetBlue")))) + (font-lock-doc-string-face ((t (:italic t :bold t :foreground "blue4")))) + (font-lock-exit-face ((t (nil)))) + (font-lock-function-name-face ((t (:bold t :foreground "brown4")))) + (font-lock-keyword-face ((t (:bold t :foreground "black")))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:italic t :bold t :foreground "green4")))) + (font-lock-type-face ((t (:bold t :foreground "steelblue")))) + (font-lock-variable-name-face ((t (:italic t :bold t :foreground "magenta4")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (gnus-cite-attribution-face ((t (:italic t :bold t)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (nil)))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-filterhist-face-1 ((t (nil)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4")))) + (gnus-header-from-face ((t (:bold t :foreground "red3")))) + (gnus-header-name-face ((t (:bold t :foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:bold t :foreground "red4")))) + (gnus-signature-face ((t (:italic t)))) + (gnus-splash ((t (nil)))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:italic t :bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :bold t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (:bold t)))) + (gnus-summary-selected-face ((t (:underline t)))) + (green ((t (nil)))) + (gui-button-face ((t (:background "grey75")))) + (gui-element ((t (:background "Gray80")))) + (highlight ((t (:background "darkseagreen2")))) + (highlight-changes-delete-face ((t (:underline t :foreground "red")))) + (highlight-changes-face ((t (:foreground "red")))) + (highline-face ((t (:background "paleturquoise")))) + (holiday-face ((t (:background "pink")))) + (html-helper-italic-face ((t (:italic t)))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (isearch ((t (nil)))) + (italic ((t (:italic t)))) + (lazy-highlight-face ((t (:bold t :foreground "dark magenta")))) + (left-margin ((t (nil)))) + (linemenu-face ((t (nil)))) + (list-mode-item-selected ((t (nil)))) + (makefile-space-face ((t (:background "hotpink")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:bold t)))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "darkblue" :foreground "yellow")))) + (modeline-buffer-id ((t (:background "black" :foreground "white")))) + (modeline-mousable ((t (:background "black" :foreground "white")))) + (modeline-mousable-minor-mode ((t (:background "black" :foreground "white")))) + (nil ((t (nil)))) + (paren-mismatch-face ((t (:bold t)))) + (paren-no-match-face ((t (:bold t)))) + (pointer ((t (nil)))) + (primary-selection ((t (nil)))) + (red ((t (nil)))) + (region ((t (:background "gray")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (sgml-doctype-face ((t (nil)))) + (sgml-end-tag-face ((t (nil)))) + (sgml-entity-face ((t (nil)))) + (sgml-ignored-face ((t (nil)))) + (sgml-sgml-face ((t (nil)))) + (sgml-start-tag-face ((t (nil)))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:bold t :background "purple" :foreground "white")))) + (speedbar-button-face ((t (:bold t :foreground "green4")))) + (speedbar-directory-face ((t (:bold t :foreground "blue4")))) + (speedbar-file-face ((t (:bold t :foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (swbuff-current-buffer-face ((t (:bold t)))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (:background "black")))) + (term-blue ((t (:foreground "blue")))) + (term-bluebg ((t (:background "blue")))) + (term-bold ((t (:bold t)))) + (term-cyan ((t (:foreground "cyan")))) + (term-cyanbg ((t (:background "cyan")))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-green ((t (:foreground "green")))) + (term-greenbg ((t (:background "green")))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (:foreground "magenta")))) + (term-magentabg ((t (:background "magenta")))) + (term-red ((t (:foreground "red")))) + (term-redbg ((t (:background "red")))) + (term-underline ((t (:underline t)))) + (term-white ((t (:foreground "white")))) + (term-whitebg ((t (:background "white")))) + (term-yellow ((t (:foreground "yellow")))) + (term-yellowbg ((t (:background "yellow")))) + (text-cursor ((t (nil)))) + (toolbar ((t (nil)))) + (underline ((t (:underline t)))) + (vc-annotate-face-0046FF ((t (nil)))) + (vcursor ((t (:underline t :background "cyan" :foreground "blue")))) + (vertical-divider ((t (nil)))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red")))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange")))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:underline t :foreground "Blue")))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:underline t :foreground "DarkGoldenrod")))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:underline t :foreground "ForestGreen")))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:underline t :foreground "Brown")))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:underline t :foreground "Grey50")))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (woman-bold-face ((t (:bold t)))) + (woman-italic-face ((t (nil)))) + (woman-unknown-face ((t (nil)))) + (yellow ((t (nil)))) + (zmacs-region ((t (nil))))))) + +(defun color-theme-beige-diff () + "Brownish faces for diff and change-log modes. +This is intended for other color themes to use (eg. `color-theme-gnome2' +and `color-theme-blue-sea')." + (color-theme-install + '(color-theme-beige-diff + nil + (change-log-acknowledgement-face ((t (:foreground "firebrick")))) + (change-log-conditionals-face ((t (:foreground "khaki" :background "sienna")))) + (change-log-date-face ((t (:foreground "gold")))) + (change-log-email-face ((t (:foreground "khaki" :underline t)))) + (change-log-file-face ((t (:bold t :foreground "lemon chiffon")))) + (change-log-function-face ((t (:foreground "khaki" :background "sienna")))) + (change-log-list-face ((t (:foreground "wheat")))) + (change-log-name-face ((t (:bold t :foreground "light goldenrod")))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (:foreground "grey50")))) + (diff-file-header-face ((t (:bold t :foreground "lemon chiffon")))) + (diff-function-face ((t (:foreground "grey50")))) + (diff-header-face ((t (:foreground "lemon chiffon")))) + (diff-hunk-header-face ((t (:foreground "light goldenrod")))) + (diff-index-face ((t (:bold t :underline t)))) + (diff-nonexistent-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-removed-face ((t (nil)))) + (log-view-message-face ((t (:foreground "lemon chiffon"))))))) + +(defun color-theme-standard-ediff () + "Standard colors for ediff faces. +This is intended for other color themes to use +\(eg. `color-theme-goldenrod')." + (color-theme-install + '(color-theme-beige-diff + nil + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White"))))))) + +(defun color-theme-beige-eshell () + "Brownish colors for eshell faces only. +This is intended for other color themes to use (eg. `color-theme-goldenrod')." + (color-theme-install + '(color-theme-beige-eshell + nil + (eshell-ls-archive-face ((t (:bold t :foreground "IndianRed")))) + (eshell-ls-backup-face ((t (:foreground "Grey")))) + (eshell-ls-clutter-face ((t (:foreground "DimGray")))) + (eshell-ls-directory-face ((t (:bold t :foreground "dark khaki")))) + (eshell-ls-executable-face ((t (:foreground "Coral")))) + (eshell-ls-missing-face ((t (:foreground "black")))) + (eshell-ls-picture-face ((t (:foreground "gold")))) ; non-standard face + (eshell-ls-product-face ((t (:foreground "dark sea green")))) + (eshell-ls-readonly-face ((t (:foreground "light steel blue")))) + (eshell-ls-special-face ((t (:foreground "gold")))) + (eshell-ls-symlink-face ((t (:foreground "peach puff")))) + (eshell-ls-text-face ((t (:foreground "moccasin")))) ; non-standard face + (eshell-ls-todo-face ((t (:bold t :foreground "yellow green")))) ; non-standard face + (eshell-ls-unreadable-face ((t (:foreground "DimGray")))) + (eshell-prompt-face ((t (:foreground "lemon chiffon"))))))) + +(defun color-theme-goldenrod () + "Brown color theme. Very different from the others. +Supports standard, font-lock and info faces, and it uses +`color-theme-blue-gnus', `color-theme-blue-erc' , and +`color-theme-beige-diff'." + (interactive) + (color-theme-blue-gnus) + (let ((color-theme-is-cumulative t)) + (color-theme-blue-erc) + (color-theme-beige-diff) + (color-theme-beige-eshell) + (color-theme-install + '(color-theme-goldenrod + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "light goldenrod") + (foreground-color . "goldenrod") + (mouse-color . "goldenrod")) + ((goto-address-mail-face . info-xref) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t :foreground "lavender")))) + (font-lock-builtin-face ((t (:foreground "pale goldenrod")))) + (font-lock-comment-face ((t (:foreground "indian red")))) + (font-lock-constant-face ((t (:foreground "pale green")))) + (font-lock-function-name-face ((t (:bold t :foreground "lemon chiffon")))) + (font-lock-keyword-face ((t (:foreground "wheat")))) + (font-lock-string-face ((t (:foreground "gold")))) + (font-lock-type-face ((t (:foreground "dark khaki" :bold t)))) + (font-lock-variable-name-face ((t (:bold t :foreground "khaki")))) + (font-lock-warning-face ((t (:bold t :foreground "orange red")))) + (fringe ((t (:background "gray25")))) + (header-line ((t (:background "gray20" :foreground "gray70")))) + (highlight ((t (:background "dark slate blue")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:bold t)))) + (info-xref ((t (:bold t :foreground "pale goldenrod")))) + (isearch ((t (:background "SeaGreen4")))) + (isearch-lazy-highlight-face ((t (:background "DarkOliveGreen4")))) + (italic ((t (:italic t :foreground "lavender")))) + (menu ((t (:background "gray25" :foreground "lemon chiffon")))) + (modeline ((t (:background "gray40" :foreground "lemon chiffon" :box (:line-width 1 :style released-button))))) + (modeline-buffer-id ((t (:background "AntiqueWhite4" :foreground "lemon chiffon")))) + (modeline-mousable ((t (:background "AntiqueWhite4" :foreground "lemon chiffon")))) + (modeline-mousable-minor-mode ((t (:background "wheat" :foreground "lemon chiffon")))) + (mode-line-inactive ((t (:background "gray20" :foreground "lemon chiffon" :box (:line-width 1 :style released-button))))) + (region ((t (:background "dark olive green")))) + (secondary-selection ((t (:background "dark green")))) + (tool-bar ((t (:background "gray25" :foreground "lemon chiffon" :box (:line-width 1 :style released-button))))) + (underline ((t (:underline t)))))))) + +(defun color-theme-ramangalahy () + "Color theme by Solofo Ramangalahy, created 2000-10-18. +Black on light grey, includes faces for vm, ispell, gnus, +dired, display-time, cperl, font-lock, widget, x-symbol." + (interactive) + (color-theme-install + '(color-theme-ramangalahy + ((background-color . "lightgrey") + (background-mode . light) + (background-toolbar-color . "#bfbfbfbfbfbf") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#737373737373") + (cursor-color . "blue") + (foreground-color . "black") + (top-toolbar-shadow-color . "#e6e6e6e6e6e6")) + ((gnus-mouse-face . highlight) + (goto-address-mail-face . info-xref) + (ispell-highlight-face . highlight) + (notes-bold-face . notes-bold-face) + (setnu-line-number-face . bold) + (tinyreplace-:face . highlight) + (vm-highlight-url-face . bold-italic) + (vm-highlighted-header-face . bold) + (vm-mime-button-face . gui-button-face) + (vm-summary-highlight-face . bold)) + (default ((t (nil)))) + (bbdb-company ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (nil)))) + (cperl-here-face ((t (:foreground "green4")))) + (cperl-pod-face ((t (:foreground "brown4")))) + (cperl-pod-head-face ((t (:foreground "steelblue")))) + (custom-button-face ((t (:bold t)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t)))) + (dired-face-executable ((t (:foreground "SeaGreen")))) + (dired-face-flagged ((t (:background "LightSlateGray")))) + (dired-face-marked ((t (:background "PaleVioletRed")))) + (dired-face-permissions ((t (:background "grey75" :foreground "black")))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (dired-face-symlink ((t (:foreground "blue")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "NavyBlue")))) + (font-lock-comment-face ((t (:bold t :foreground "purple")))) + (font-lock-doc-string-face ((t (:bold t :foreground "slateblue")))) + (font-lock-emphasized-face ((t (:bold t :background "lightyellow2")))) + (font-lock-function-name-face ((t (:bold t :foreground "blue")))) + (font-lock-keyword-face ((t (:bold t :foreground "violetred")))) + (font-lock-other-emphasized-face ((t (:italic t :bold t :background "lightyellow2")))) + (font-lock-other-type-face ((t (:bold t :foreground "orange3")))) + (font-lock-preprocessor-face ((t (:bold t :foreground "mediumblue")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:foreground "green4")))) + (font-lock-type-face ((t (:bold t :foreground "steelblue")))) + (font-lock-variable-name-face ((t (:foreground "magenta4")))) + (font-lock-warning-face ((t (:bold t :background "yellow" :foreground "Red")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (nil)))) + (gnus-emphasis-italic ((t (nil)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t)))) + (gnus-emphasis-underline-italic ((t (:underline t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-news-3-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:foreground "indianred4")))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-signature-face ((t (:bold t)))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (nil)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-x-face ((t (:background "lightgrey" :foreground "black")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:background "lightgrey")))) + (highlight ((t (:background "darkseagreen2")))) + (info-node ((t (:underline t :bold t :foreground "mediumpurple")))) + (info-xref ((t (:underline t :bold t :foreground "#0000ee")))) + (isearch ((t (:background "paleturquoise")))) + (italic ((t (:italic t)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68" :foreground "black")))) + (message-cited-text ((t (:foreground "slategrey")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-contents ((t (:italic t)))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-headers ((t (:bold t)))) + (message-highlighted-header-contents ((t (:bold t)))) + (message-separator-face ((t (:foreground "brown")))) + (message-url ((t (:bold t)))) + (modeline ((t (:bold t :background "Gray75" :foreground "Black")))) + (modeline-buffer-id ((t (:bold t :background "Gray75" :foreground "blue4")))) + (modeline-mousable ((t (:bold t :background "Gray75" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:bold t :background "Gray75" :foreground "green4")))) + (paren-blink-off ((t (:foreground "lightgrey")))) + (paren-match ((t (:background "darkseagreen2")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "black")))) + (pointer ((t (:foreground "blue")))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "black" :foreground "white")))) + (right-margin ((t (nil)))) + (searchm-buffer ((t (:bold t :background "white" :foreground "red")))) + (searchm-button ((t (:bold t :background "CadetBlue" :foreground "white")))) + (searchm-field ((t (:background "grey89")))) + (searchm-field-label ((t (:bold t)))) + (searchm-highlight ((t (:bold t :background "darkseagreen2" :foreground "black")))) + (secondary-selection ((t (:background "paleturquoise")))) + (template-message-face ((t (:bold t)))) + (text-cursor ((t (:background "blue" :foreground "lightgrey")))) + (toolbar ((t (nil)))) + (underline ((t (:underline t)))) + (vertical-divider ((t (nil)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (x-face ((t (:background "white" :foreground "black")))) + (x-symbol-adobe-fontspecific-face ((t (nil)))) + (x-symbol-face ((t (nil)))) + (x-symbol-heading-face ((t (:underline t :bold t :foreground "green4")))) + (x-symbol-info-face ((t (:foreground "green4")))) + (x-symbol-invisible-face ((t (nil)))) + (x-symbol-revealed-face ((t (:background "pink")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "yellow"))))))) + +(defun color-theme-raspopovic () + "Color theme by Pedja Raspopovic, created 2000-10-19. +Includes faces for dired, font-lock, info, paren." + (interactive) + (color-theme-install + '(color-theme-raspopovic + ((background-color . "darkblue") + (background-mode . light) + (background-toolbar-color . "#bfbfbfbfbfbf") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#737373737373") + (cursor-color . "Red3") + (foreground-color . "yellow") + (top-toolbar-shadow-color . "#e6e6e6e6e6e6")) + ((setnu-line-number-face . bold) + (goto-address-mail-face . info-xref)) + (default ((t (nil)))) + (blue ((t (:background "darkblue" :foreground "blue")))) + (bold ((t (:bold t :background "darkblue" :foreground "yellow")))) + (bold-italic ((t (:bold t :background "darkblue" :foreground "red3")))) + (comint-input-face ((t (:foreground "deepskyblue")))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:foreground "lightgreen")))) + (dired-face-executable ((t (:foreground "indianred")))) + (dired-face-flagged ((t (:background "LightSlateGray")))) + (dired-face-marked ((t (:background "darkblue" :foreground "deepskyblue")))) + (dired-face-permissions ((t (:background "darkblue" :foreground "white")))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (dired-face-symlink ((t (:foreground "grey95")))) + (font-lock-comment-face ((t (:background "darkblue" :foreground "lightgreen")))) + (font-lock-doc-string-face ((t (:background "darkblue" :foreground "darkseagreen")))) + (font-lock-function-name-face ((t (:bold t :background "darkblue" :foreground "indianred")))) + (font-lock-keyword-face ((t (:background "darkblue" :foreground "skyblue")))) + (font-lock-preprocessor-face ((t (:background "darkblue" :foreground "orange")))) + (font-lock-reference-face ((t (:background "darkblue" :foreground "deepskyblue")))) + (font-lock-string-face ((t (:background "darkblue" :foreground "lightgrey")))) + (font-lock-type-face ((t (:background "darkblue" :foreground "orange")))) + (font-lock-variable-name-face ((t (:background "darkblue" :foreground "white")))) + (green ((t (:background "darkblue" :foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (highlight ((t (:background "yellow" :foreground "darkblue")))) + (info-node ((t (:bold t :background "darkblue" :foreground "red3")))) + (info-xref ((t (:bold t :background "darkblue" :foreground "yellow")))) + (isearch ((t (:background "yellow" :foreground "darkblue")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (:background "darkblue" :foreground "red3")))) + (left-margin ((t (:background "darkblue" :foreground "yellow")))) + (list-mode-item-selected ((t (:background "gray68" :foreground "yellow")))) + (makefile-space-face ((t (:background "hotpink")))) + (modeline ((t (:background "Gray75" :foreground "Black")))) + (modeline-buffer-id ((t (:background "Gray75" :foreground "blue")))) + (modeline-mousable ((t (:background "Gray75" :foreground "red")))) + (modeline-mousable-minor-mode ((t (:background "Gray75" :foreground "green4")))) + (paren-blink-off ((t (:foreground "darkblue")))) + (paren-match ((t (:background "yellow" :foreground "darkblue")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "yellow")))) + (pointer ((t (:background "darkblue" :foreground "red3")))) + (primary-selection ((t (:background "yellow" :foreground "darkblue")))) + (red ((t (:background "darkblue" :foreground "red")))) + (right-margin ((t (:background "darkblue" :foreground "yellow")))) + (secondary-selection ((t (:background "darkblue" :foreground "yellow")))) + (shell-option-face ((t (:background "darkblue" :foreground "cyan2")))) + (shell-output-2-face ((t (:background "darkblue" :foreground "darkseagreen")))) + (shell-output-3-face ((t (:background "darkblue" :foreground "lightgrey")))) + (shell-output-face ((t (:background "darkblue" :foreground "white")))) + (shell-prompt-face ((t (:background "darkblue" :foreground "red")))) + (text-cursor ((t (:background "Red3" :foreground "white")))) + (underline ((t (:underline t :background "darkblue" :foreground "yellow")))) + (vvb-face ((t (:background "pink" :foreground "black")))) + (yellow ((t (:background "darkblue" :foreground "yellow")))) + (zmacs-region ((t (:background "gray" :foreground "black"))))))) + +(defun color-theme-taylor () + "Color theme by Art Taylor, created 2000-10-20. +Wheat on black. Includes faces for font-lock, gnus, paren." + (interactive) + (color-theme-install + '(color-theme-taylor + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "red") + (foreground-color . "wheat") + (mouse-color . "black")) + ((gnus-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t :background "grey40" :foreground "yellow")))) + (bold-italic ((t (:italic t :bold t :foreground "yellow green")))) + (fl-comment-face ((t (:foreground "medium purple")))) + (fl-function-name-face ((t (:foreground "green")))) + (fl-keyword-face ((t (:foreground "LightGreen")))) + (fl-string-face ((t (:foreground "light coral")))) + (fl-type-face ((t (:foreground "cyan")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:foreground "OrangeRed")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-function-name-face ((t (:foreground "LightSkyBlue")))) + (font-lock-keyword-face ((t (:foreground "Cyan")))) + (font-lock-string-face ((t (:foreground "LightSalmon")))) + (font-lock-type-face ((t (:foreground "PaleGreen")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1")))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2")))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "aquamarine3")))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4")))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise")))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise")))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "pink")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "pink")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (highlight ((t (:background "black" :foreground "black")))) + (italic ((t (:italic t :foreground "yellow3")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "green4")))) + (message-header-name-face ((t (:foreground "DarkGreen")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow")))) + (message-header-other-face ((t (:foreground "#b00000")))) + (message-header-subject-face ((t (:foreground "green3")))) + (message-header-to-face ((t (:bold t :foreground "green2")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "blue3")))) + (modeline ((t (:background "wheat" :foreground "black")))) + (modeline-buffer-id ((t (:background "wheat" :foreground "black")))) + (modeline-mousable ((t (:background "wheat" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "wheat" :foreground "black")))) + (region ((t (:background "blue")))) + (secondary-selection ((t (:background "darkslateblue" :foreground "black")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (underline ((t (:underline t)))) + (xref-keyword-face ((t (:foreground "blue")))) + (xref-list-default-face ((t (nil)))) + (xref-list-pilot-face ((t (:foreground "navy")))) + (xref-list-symbol-face ((t (:foreground "navy"))))))) + +(defun color-theme-marquardt () + "Color theme by Colin Marquardt, created 2000-10-25. +Black on bisque, a light color. Based on some settings from Robin S. Socha. +Features some color changes to programming languages, especially vhdl-mode. +You might also want to put something like + Emacs*Foreground: Black + Emacs*Background: bisque2 +in your ~/.Xdefaults." + (interactive) + (color-theme-install + '(color-theme-marquardt + ((background-color . "bisque") + (background-mode . light) + (background-toolbar-color . "bisque") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#909099999999") + (cursor-color . "Red3") + (foreground-color . "black") + (top-toolbar-shadow-color . "#ffffffffffff")) + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:bold t)))) + (border-glyph ((t (nil)))) + (calendar-today-face ((t (:underline t)))) + (diary-face ((t (:foreground "red")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "NavyBlue")))) + (font-lock-comment-face ((t (:foreground "gray50")))) + (font-lock-doc-string-face ((t (:foreground "green4")))) + (font-lock-function-name-face ((t (:foreground "darkorange")))) + (font-lock-keyword-face ((t (:foreground "blue3")))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-special-comment-face ((t (:foreground "blue4")))) + (font-lock-special-keyword-face ((t (:foreground "red4")))) + (font-lock-string-face ((t (:foreground "green4")))) + (font-lock-type-face ((t (:foreground "steelblue")))) + (font-lock-variable-name-face ((t (:foreground "black")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:background "azure1" :foreground "Black")))) + (highlight ((t (:background "darkseagreen2" :foreground "blue")))) + (holiday-face ((t (:background "pink" :foreground "black")))) + (info-node ((t (:bold t)))) + (info-xref ((t (:bold t)))) + (isearch ((t (:background "yellow" :foreground "red")))) + (italic ((t (:bold t)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68" :foreground "black")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "bisque2" :foreground "steelblue4")))) + (modeline-buffer-id ((t (:background "bisque2" :foreground "blue4")))) + (modeline-mousable ((t (:background "bisque2" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "bisque2" :foreground "green4")))) + (paren-blink-off ((t (:foreground "azure1")))) + (paren-face ((t (:background "lightgoldenrod")))) + (paren-match ((t (:background "bisque2")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "black")))) + (paren-mismatch-face ((t (:background "DeepPink")))) + (paren-no-match-face ((t (:background "yellow")))) + (pointer ((t (:background "white" :foreground "blue")))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (shell-option-face ((t (:foreground "gray50")))) + (shell-output-2-face ((t (:foreground "green4")))) + (shell-output-3-face ((t (:foreground "green4")))) + (shell-output-face ((t (:bold t)))) + (shell-prompt-face ((t (:foreground "blue3")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (text-cursor ((t (:background "Red3" :foreground "bisque")))) + (toolbar ((t (:background "Gray80")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (nil)))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "SaddleBrown")))) + (vhdl-font-lock-function-face ((t (:foreground "DarkCyan")))) + (vhdl-font-lock-generic-/constant-face ((t (:foreground "Gold3")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red")))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange")))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-font-lock-type-face ((t (:foreground "ForestGreen")))) + (vhdl-font-lock-variable-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:underline t :foreground "Blue")))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:underline t :foreground "DarkGoldenrod")))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:underline t :foreground "ForestGreen")))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:underline t :foreground "Brown")))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:underline t :foreground "Grey50")))) + (vhdl-speedbar-subprogram-face ((t (:foreground "Orchid4")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "steelblue" :foreground "yellow"))))))) + +(defun color-theme-parus () + "Color theme by Jon K Hellan, created 2000-11-01. +White on dark blue color theme. + +There is some redundancy in the X resources, but I do not have time to +find out which should go or which should stay: + +Emacs*dialog*Background: midnightblue +Emacs*dialog*Foreground: white +Emacs*popup*Background: midnightblue +Emacs*popup*Foreground: white +emacs*background: #00005a +emacs*cursorColor: gray90 +emacs*foreground: White +emacs.dialog*.background: midnightblue +emacs.menu*.background: midnightblue +emacs.pane.menubar.background: midnightblue" + (interactive) + (color-theme-install + '(color-theme-parus + ((background-color . "#00005a") + (background-mode . dark) + (border-color . "black") + (cursor-color . "yellow") + (foreground-color . "White") + (mouse-color . "yellow")) + ((gnus-mouse-face . highlight) + (list-matching-lines-face . bold) + (paren-face . bold) + (paren-mismatch-face . paren-mismatch-face) + (paren-no-match-face . paren-no-match-face) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (font-latex-bold-face ((t (:bold t :foreground "OliveDrab")))) + (font-latex-italic-face ((t (:italic t :foreground "OliveDrab")))) + (font-latex-math-face ((t (:foreground "burlywood")))) + (font-latex-sedate-face ((t (:foreground "LightGray")))) + (font-latex-string-face ((t (:foreground "LightSalmon")))) + (font-latex-warning-face ((t (:foreground "Pink")))) + (font-lock-builtin-face ((t (:foreground "#e0e0ff")))) + (font-lock-reference-face ((t (:foreground "#e0e0ff")))) + (font-lock-comment-face ((t (:foreground "#FFd1d1")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-preprocessor-face ((t (:foreground "Aquamarine")))) + (font-lock-function-name-face ((t (:foreground "#b2e4ff")))) + (font-lock-keyword-face ((t (:foreground "#a0ffff")))) + (font-lock-string-face ((t (:foreground "#efca10")))) + (font-lock-doc-string-face ((t (:foreground "#efca10")))) + (font-lock-type-face ((t (:foreground "PaleGreen")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:foreground "#dfdfff")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "light cyan")))) + (gnus-cite-face-3 ((t (:foreground "light yellow")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1")))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2")))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "aquamarine3")))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4")))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise")))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise")))) + (gnus-header-content-face ((t (:italic t :foreground "#90f490")))) + (gnus-header-from-face ((t (:foreground "#aaffaa")))) + (gnus-header-name-face ((t (:foreground "#c7e3c7")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "yellow")))) + (gnus-header-subject-face ((t (:foreground "#a0f0a0")))) + (gnus-signature-face ((t (:italic t)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "pink")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "pink")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (highlight ((t (:background "darkolivegreen")))) + (italic ((t (:italic t)))) + (message-cited-text-face ((t (:foreground "#dfdfff")))) + (message-header-cc-face ((t (:bold t :foreground "#a0f0a0")))) + (message-header-name-face ((t (:foreground "#c7e3c7")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow")))) + (message-header-other-face ((t (:foreground "#db9b9b")))) + (message-header-subject-face ((t (:foreground "#a0f0a0")))) + (message-header-to-face ((t (:bold t :foreground "#aaffaa")))) + (message-header-xheader-face ((t (:foreground "#e2e2ff")))) + (message-mml-face ((t (:foreground "#abdbab")))) + (message-separator-face ((t (:foreground "#dfdfff")))) + (modeline ((t (:background "White" :foreground "#00005a")))) + (modeline-buffer-id ((t (:background "White" :foreground "#00005a")))) + (modeline-mousable ((t (:background "White" :foreground "#00005a")))) + (modeline-mousable-minor-mode ((t (:background "White" :foreground "#00005a")))) + (paren-mismatch-face ((t (:background "DeepPink")))) + (paren-no-match-face ((t (:background "yellow")))) + (region ((t (:background "blue")))) + (primary-selection ((t (:background "blue")))) + (isearch ((t (:background "blue")))) + (secondary-selection ((t (:background "darkslateblue")))) + (underline ((t (:underline t)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray"))))))) + +(defun color-theme-high-contrast () + "High contrast color theme, maybe for the visually impaired. +Watch out! This will set a very large font-size! + +If you want to modify the font as well, you should customize variable +`color-theme-legal-frame-parameters' to \"\\(color\\|mode\\|font\\|height\\|width\\)$\". +The default setting will prevent color themes from installing specific +fonts." + (interactive) + (color-theme-standard) + (let ((color-theme-is-cumulative t)) + (color-theme-install + '(color-theme-high-contrast + ((cursor-color . "red") + (width . 60) + (height . 25) + (background . dark)) + (default ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight bold :height 240 :width normal :family "adobe-courier")))) + + (bold ((t (:bold t :underline t)))) + (bold-italic ((t (:bold t :underline t)))) + (font-lock-builtin-face ((t (:bold t :foreground "Red")))) + (font-lock-comment-face ((t (:bold t :foreground "Firebrick")))) + (font-lock-constant-face ((t (:bold t :underline t :foreground "Blue")))) + (font-lock-function-name-face ((t (:bold t :foreground "Blue")))) + (font-lock-keyword-face ((t (:bold t :foreground "Purple")))) + (font-lock-string-face ((t (:bold t :foreground "DarkGreen")))) + (font-lock-type-face ((t (:bold t :foreground "ForestGreen")))) + (font-lock-variable-name-face ((t (:bold t :foreground "DarkGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (highlight ((t (:background "black" :foreground "white" :bold 1)))) + (info-menu-5 ((t (:underline t :bold t)))) + (info-node ((t (:bold t)))) + (info-xref ((t (:bold t )))) + (italic ((t (:bold t :underline t)))) + (modeline ((t (:background "black" :foreground "white" :bold 1)))) + (modeline-buffer-id ((t (:background "black" :foreground "white" :bold 1)))) + (modeline-mousable ((t (:background "black" :foreground "white" :bold 1)))) + (modeline-mousable-minor-mode ((t (:background "black" :foreground "white" :bold 1)))) + (region ((t (:background "black" :foreground "white" :bold 1)))) + (secondary-selection ((t (:background "black" :foreground "white" :bold 1)))) + (underline ((t (:bold t :underline t)))))))) + +(defun color-theme-infodoc () + "Color theme by Frederic Giroud, created 2001-01-18. +Black on wheat scheme. Based on infodoc (xemacs variant distribution), +with my favorit fontlock color." + (interactive) + (color-theme-install + '(color-theme-infodoc + ((background-color . "wheat") + (background-mode . light) + (background-toolbar-color . "#000000000000") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#000000000000") + (cursor-color . "red") + (foreground-color . "black") + (top-toolbar-shadow-color . "#ffffffffffff")) + nil + (default ((t (:bold t)))) + (blue ((t (:bold t :foreground "blue")))) + (bold ((t (:background "wheat" :foreground "black")))) + (bold-italic ((t (:bold t :background "wheat" :foreground "black")))) + (border-glyph ((t (:bold t)))) + (calendar-today-face ((t (:underline t :bold t)))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:bold t :background "blue" :foreground "white")))) + (custom-documentation-face ((t (:bold t :background "wheat" :foreground "purple4")))) + (custom-face-tag-face ((t (:underline t :bold t)))) + (custom-group-tag-face ((t (:underline t :bold t :background "wheat" :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :bold t :background "wheat" :foreground "red")))) + (custom-invalid-face ((t (:bold t :background "red" :foreground "yellow")))) + (custom-modified-face ((t (:bold t :background "blue" :foreground "white")))) + (custom-rogue-face ((t (:bold t :background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t :bold t)))) + (custom-set-face ((t (:bold t :background "white" :foreground "blue")))) + (custom-state-face ((t (:bold t :background "wheat" :foreground "dark green")))) + (custom-variable-button-face ((t (:underline t)))) + (custom-variable-tag-face ((t (:underline t :bold t :background "wheat" :foreground "blue")))) + (diary-face ((t (:bold t :foreground "red")))) + (display-time-mail-balloon-enhance-face ((t (:bold t :background "wheat" :foreground "black")))) + (display-time-mail-balloon-gnus-group-face ((t (:bold t :background "wheat" :foreground "blue")))) + (display-time-time-balloon-face ((t (:bold t :background "light salmon" :foreground "dark green")))) + (font-lock-comment-face ((t (:bold t :background "wheat" :foreground "turquoise4")))) + (font-lock-doc-string-face ((t (:bold t :background "wheat" :foreground "purple4")))) + (font-lock-function-name-face ((t (:bold t :background "wheat" :foreground "blue4")))) + (font-lock-keyword-face ((t (:bold t :background "wheat" :foreground "dark orchid")))) + (font-lock-preprocessor-face ((t (:bold t :background "wheat" :foreground "orchid4")))) + (font-lock-reference-face ((t (:bold t :background "wheat" :foreground "red3")))) + (font-lock-string-face ((t (:bold t :background "wheat" :foreground "dark goldenrod")))) + (font-lock-type-face ((t (:bold t :background "wheat" :foreground "brown")))) + (font-lock-variable-name-face ((t (:bold t :background "wheat" :foreground "chocolate")))) + (font-lock-warning-face ((t (:bold t :background "wheat" :foreground "black")))) + (gdb-arrow-face ((t (:bold t :background "LightGreen" :foreground "black")))) + (green ((t (:bold t :foreground "green")))) + (gui-button-face ((t (:bold t :background "wheat" :foreground "red")))) + (gui-element ((t (:bold t :background "wheat" :foreground "black")))) + (highlight ((t (:bold t :background "darkseagreen2" :foreground "dark green")))) + (holiday-face ((t (:bold t :background "pink" :foreground "black")))) + (hproperty:but-face ((t (:bold t :background "wheat" :foreground "medium violet red")))) + (hproperty:flash-face ((t (:bold t :background "wheat" :foreground "gray80")))) + (hproperty:highlight-face ((t (:bold t :background "wheat" :foreground "red")))) + (hproperty:item-face ((t (:bold t)))) + (isearch ((t (:bold t :background "pale turquoise" :foreground "blue")))) + (italic ((t (:bold t :background "wheat" :foreground "black")))) + (left-margin ((t (:bold t :background "wheat" :foreground "black")))) + (list-mode-item-selected ((t (:bold t :background "gray68" :foreground "black")))) + (message-cited-text ((t (:bold t :background "wheat" :foreground "brown")))) + (message-header-contents ((t (:bold t :background "wheat" :foreground "black")))) + (message-headers ((t (:bold t :background "wheat" :foreground "black")))) + (message-highlighted-header-contents ((t (:bold t :background "wheat" :foreground "blue")))) + (message-url ((t (nil)))) + (modeline ((t (:bold t :background "light salmon" :foreground "dark green")))) + (modeline-buffer-id ((t (:bold t :background "light salmon" :foreground "blue4")))) + (modeline-mousable ((t (:bold t :background "light salmon" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:bold t :background "light salmon" :foreground "green4")))) + (pointer ((t (:bold t :background "wheat" :foreground "red")))) + (primary-selection ((t (:bold t :background "medium sea green")))) + (red ((t (:bold t :foreground "red")))) + (right-margin ((t (:bold t :background "wheat" :foreground "black")))) + (secondary-selection ((t (:bold t :background "paleturquoise" :foreground "black")))) + (shell-input-face ((t (:bold t :background "wheat" :foreground "blue")))) + (shell-option-face ((t (:bold t :background "wheat" :foreground "turquoise4")))) + (shell-output-2-face ((t (:bold t :background "wheat" :foreground "dark goldenrod")))) + (shell-output-3-face ((t (:bold t :background "wheat" :foreground "dark goldenrod")))) + (shell-output-face ((t (:bold t :background "wheat" :foreground "black")))) + (shell-prompt-face ((t (:bold t :background "wheat" :foreground "dark orchid")))) + (text-cursor ((t (:bold t :background "red" :foreground "wheat")))) + (toolbar ((t (:bold t :background "wheat" :foreground "black")))) + (underline ((t (:underline t :bold t :background "wheat" :foreground "black")))) + (vertical-divider ((t (:bold t)))) + (widget-button-face ((t (nil)))) + (widget-button-pressed-face ((t (:bold t :background "wheat" :foreground "red")))) + (widget-documentation-face ((t (:bold t :background "wheat" :foreground "dark green")))) + (widget-field-face ((t (:bold t :background "gray85")))) + (widget-inactive-face ((t (:bold t :background "wheat" :foreground "dim gray")))) + (x-face ((t (:bold t :background "wheat" :foreground "black")))) + (yellow ((t (:bold t :foreground "yellow")))) + (zmacs-region ((t (:bold t :background "lightyellow" :foreground "darkgreen"))))))) + +(defun color-theme-classic () + "Color theme by Frederic Giroud, created 2001-01-18. +AntiqueWhite on darkslategrey scheme. Based on Gnome 2, with my favorit +color foreground-color and fontlock color." + (interactive) + (color-theme-blue-gnus) + (let ((color-theme-is-cumulative t)) + (color-theme-install + '(color-theme-classic + ((foreground-color . "AntiqueWhite") + (background-color . "darkslategrey") + (mouse-color . "Grey") + (cursor-color . "Red") + (border-color . "black") + (background-mode . dark)) + ((apropos-keybinding-face . underline) + (apropos-label-face . italic) + (apropos-match-face . secondary-selection) + (apropos-property-face . bold-italic) + (apropos-symbol-face . info-xref) + (goto-address-mail-face . message-header-to-face) + (goto-address-mail-mouse-face . secondary-selection) + (goto-address-url-face . info-xref) + (goto-address-url-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t :foreground "beige")))) + (calendar-today-face ((t (:underline t)))) + (cperl-array-face ((t (:foreground "Yellow")))) + (cperl-hash-face ((t (:foreground "White")))) + (cperl-nonoverridable-face ((t (:foreground "SkyBlue")))) + (custom-button-face ((t (:underline t :foreground "MediumSlateBlue")))) + (custom-documentation-face ((t (:foreground "Grey")))) + (custom-group-tag-face ((t (:foreground "MediumAquamarine")))) + (custom-state-face ((t (:foreground "LightSalmon")))) + (custom-variable-tag-face ((t (:foreground "Aquamarine")))) + (diary-face ((t (:foreground "IndianRed")))) + (erc-action-face ((t (:bold t)))) + (erc-bold-face ((t (:bold t)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "LightSalmon")))) + (erc-error-face ((t (:bold t :foreground "IndianRed")))) + (erc-input-face ((t (:foreground "Beige")))) + (erc-inverse-face ((t (:background "wheat" :foreground "darkslategrey")))) + (erc-notice-face ((t (:foreground "MediumAquamarine")))) + (erc-pal-face ((t (:foreground "pale green")))) + (erc-prompt-face ((t (:foreground "MediumAquamarine")))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :foreground "IndianRed")))) + (eshell-ls-backup-face ((t (:foreground "Grey")))) + (eshell-ls-clutter-face ((t (:foreground "DimGray")))) + (eshell-ls-directory-face ((t (:bold t :foreground "MediumSlateBlue")))) + (eshell-ls-executable-face ((t (:foreground "Coral")))) + (eshell-ls-missing-face ((t (:foreground "black")))) + (eshell-ls-picture-face ((t (:foreground "Violet")))) + (eshell-ls-product-face ((t (:foreground "LightSalmon")))) + (eshell-ls-readonly-face ((t (:foreground "Aquamarine")))) + (eshell-ls-special-face ((t (:foreground "Gold")))) + (eshell-ls-symlink-face ((t (:foreground "White")))) + (eshell-ls-unreadable-face ((t (:foreground "DimGray")))) + (eshell-prompt-face ((t (:foreground "MediumAquamarine")))) + (font-lock-builtin-face ((t (:bold t :foreground "PaleGreen")))) + (font-lock-comment-face ((t (:foreground "tomato3")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-doc-string-face ((t (:foreground "LightSalmon3")))) + (font-lock-function-name-face ((t (:foreground "SteelBlue1")))) + (font-lock-keyword-face ((t (:foreground "cyan1")))) + (font-lock-reference-face ((t (:foreground "LightSalmon2")))) + (font-lock-string-face ((t (:foreground "LightSalmon3")))) + (font-lock-type-face ((t (:foreground "PaleGreen3")))) + (font-lock-variable-name-face ((t (:foreground "khaki1")))) + (font-lock-warning-face ((t (:bold t :foreground "IndianRed")))) + (font-lock-preprocessor-face ((t (:foreground "SkyBlue3")))) + (widget-field-face ((t (:background "DarkCyan")))) + (custom-group-tag-face ((t(:foreground "brown" :underline t)))) + (custom-state-face ((t (:foreground "khaki")))) + (highlight ((t (:background "PaleGreen" :foreground "DarkGreen")))) + (highline-face ((t (:background "SeaGreen")))) + (holiday-face ((t (:background "DimGray")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:underline t :bold t :foreground "DodgerBlue1")))) + (info-xref ((t (:underline t :foreground "DodgerBlue1")))) + (isearch ((t (:foreground "red" :background "CornflowerBlue")))) + (italic ((t (:italic t)))) + (modeline ((t (:background "LightSlateGray" :foreground "AntiqueWhite")))) + (modeline-buffer-id ((t (:background "LightSlateGray" :foreground "DarkBlue")))) + (modeline-mousable ((t (:background "LightSlateGray" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "LightSlateGray" :foreground "wheat")))) + (region ((t (:background "dark cyan" :foreground "cyan")))) + (secondary-selection ((t (:background "Aquamarine" :foreground "SlateBlue")))) + (show-paren-match-face ((t (:background "Aquamarine" :foreground "SlateBlue")))) + (show-paren-mismatch-face ((t (:background "Red" :foreground "White")))) + (underline ((t (:underline t)))) + (widget-field-face ((t (:foreground "LightBlue")))) + (widget-inactive-face ((t (:foreground "DimGray")))) + (widget-single-line-field-face ((t (:foreground "LightBlue")))) + (woman-bold-face ((t (:bold t)))) + (woman-italic-face ((t (:foreground "beige")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))))))) + +(defun color-theme-scintilla () + "Color theme by Gordon Messmer, created 2001-02-07. +Based on the Scintilla editor. + +If you want to modify the font as well, you should customize variable +`color-theme-legal-frame-parameters' to \"\\(color\\|mode\\|font\\|height\\|width\\)$\". +The default setting will prevent color themes from installing specific +fonts." + (interactive) + (color-theme-install + ;; The light editor style doesn't seem to look right with + ;; the same font that works in the dark editor style. + ;; Dark letters on light background just isn't as visible. + '(color-theme-scintilla + ((font . "-monotype-courier new-bold-r-normal-*-*-140-*-*-m-*-iso8859-1") + (width . 95) + (height . 40) + (background-color . "white") + (foreground-color . "black") + (background-mode . light) + (mouse-color . "grey15") + (cursor-color . "grey15")) + (default ((t nil))) + (font-lock-comment-face ((t (:italic t :foreground "ForestGreen")))) + (font-lock-string-face ((t (:foreground "DarkMagenta")))) + (font-lock-keyword-face ((t (:foreground "NavyBlue")))) + (font-lock-warning-face ((t (:bold t :foreground "VioletRed")))) + (font-lock-constant-face ((t (:foreground "Blue")))) + (font-lock-type-face ((t (:foreground "NavyBlue")))) + (font-lock-variable-name-face ((t (:foreground "DarkCyan")))) + (font-lock-function-name-face ((t (:foreground "DarkCyan")))) + (font-lock-builtin-face ((t (:foreground "NavyBlue")))) + (highline-face ((t (:background "Grey95")))) + (show-paren-match-face ((t (:background "Grey80")))) + (region ((t (:background "Grey80")))) + (highlight ((t (:foreground "ForestGreen")))) + (secondary-selection ((t (:background "NavyBlue" :foreground "white")))) + (widget-field-face ((t (:background "NavyBlue")))) + (widget-single-line-field-face ((t (:background "RoyalBlue")))))) ) + +(defun color-theme-gtk-ide () + "Color theme by Gordon Messmer, created 2001-02-07. +Inspired by a GTK IDE whose name I've forgotten. + +If you want to modify the font as well, you should customize variable +`color-theme-legal-frame-parameters' to \"\\(color\\|mode\\|font\\|height\\|width\\)$\". +The default setting will prevent color themes from installing specific +fonts." + ;; The light editor style doesn't seem to look right with + ;; the same font that works in the dark editor style. + ;; Dark letters on light background just isn't as visible. + (interactive) + (color-theme-install + '(color-theme-gtk-ide + ((font . "-monotype-courier new-medium-r-normal-*-*-120-*-*-m-*-iso8859-15") + (width . 95) + (height . 45) + (background-color . "white") + (foreground-color . "black") + (background-mode . light) + (mouse-color . "grey15") + (cursor-color . "grey15")) + (default ((t nil))) + (font-lock-comment-face ((t (:italic t :foreground "grey55")))) + (font-lock-string-face ((t (:foreground "DarkRed")))) + (font-lock-keyword-face ((t (:foreground "DarkBlue")))) + (font-lock-warning-face ((t (:bold t :foreground "VioletRed")))) + (font-lock-constant-face ((t (:foreground "OliveDrab")))) + (font-lock-type-face ((t (:foreground "SteelBlue4")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-function-name-face ((t (:foreground "SlateBlue")))) + (font-lock-builtin-face ((t (:foreground "ForestGreen")))) + (highline-face ((t (:background "grey95")))) + (show-paren-match-face ((t (:background "grey80")))) + (region ((t (:background "grey80")))) + (highlight ((t (:background "LightSkyBlue")))) + (secondary-selection ((t (:background "grey55")))) + (widget-field-face ((t (:background "navy")))) + (widget-single-line-field-face ((t (:background "royalblue")))))) ) + +(defun color-theme-midnight () + "Color theme by Gordon Messmer, created 2001-02-07. +A color theme inspired by a certain IDE for Windows. It's all from memory, +since I only used that software in college. + +If you want to modify the font as well, you should customize variable +`color-theme-legal-frame-parameters' to \"\\(color\\|mode\\|font\\|height\\|width\\)$\". +The default setting will prevent color themes from installing specific +fonts." + (interactive) + (color-theme-install + '(color-theme-midnight + ((font . "fixed") + (width . 130) + (height . 50) + (background-color . "black") + (foreground-color . "grey85") + (background-mode . dark) + (mouse-color . "grey85") + (cursor-color . "grey85")) + (default ((t (nil)))) + (font-lock-comment-face ((t (:italic t :foreground "grey60")))) + (font-lock-string-face ((t (:foreground "Magenta")))) + (font-lock-keyword-face ((t (:foreground "Cyan")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (font-lock-constant-face ((t (:foreground "OliveDrab")))) + (font-lock-type-face ((t (:foreground "DarkCyan")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-function-name-face ((t (:foreground "SlateBlue")))) + (font-lock-builtin-face ((t (:foreground "SkyBlue")))) + (highline-face ((t (:background "grey12")))) + (setnu-line-number-face ((t (:background "Grey15" :foreground "White" :bold t)))) + (show-paren-match-face ((t (:background "grey30")))) + (region ((t (:background "grey15")))) + (highlight ((t (:background "blue")))) + (secondary-selection ((t (:background "navy")))) + (widget-field-face ((t (:background "navy")))) + (widget-single-line-field-face ((t (:background "royalblue")))))) ) + +(defun color-theme-jedit-grey () + "Color theme by Gordon Messmer, created 2001-02-07. +Based on a screenshot of jedit. + +If you want to modify the font as well, you should customize variable +`color-theme-legal-frame-parameters' to \"\\(color\\|mode\\|font\\|height\\|width\\)$\". +The default setting will prevent color themes from installing specific +fonts." + (interactive) + (color-theme-install + '(color-theme-jedit-grey + ((font . "fixed") + (width . 130) + (height . 50) + (background-color . "grey77") + (foreground-color . "black") + (background-mode . light) + (mouse-color . "black") + (cursor-color . "black")) + (default ((t (nil)))) + (font-lock-comment-face ((t (:italic t :foreground "RoyalBlue4")))) + (font-lock-string-face ((t (:foreground "Gold4")))) + (font-lock-keyword-face ((t (:bold t :foreground "DarkRed")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (font-lock-constant-face ((t (:foreground "DarkCyan")))) + (font-lock-type-face ((t (:foreground "DarkRed")))) + (font-lock-function-name-face ((t (:foreground "Green4")))) + (font-lock-builtin-face ((t (:bold t :foreground "DarkRed")))) + (highline-face ((t (:background "grey84")))) + (setnu-line-number-face ((t (:background "White" :foreground "MediumPurple3" :italic t)))) + (show-paren-match-face ((t (:background "grey60")))) + (region ((t (:background "grey70")))) + (highlight ((t (:background "grey90")))) + (secondary-selection ((t (:background "white")))) + (widget-field-face ((t (:background "royalblue")))) + (widget-single-line-field-face ((t (:background "royalblue")))))) ) + +(defun color-theme-snow () + "Color theme by Nicolas Rist, created 2001-03-08. +Black on gainsboro. In Emacs, the text background is a shade darker +than the frame background: Gainsboro instead of snow. This makes the +structure of the text clearer without being too agressive on the eyes. +On XEmacs, this doesn't really work as the frame and the default face +allways use the same foreground and background colors. +The color theme includes gnus, message, font-lock, sgml, and speedbar." + (interactive) + (color-theme-install + '(color-theme-snow + ((background-color . "snow2") + (background-mode . light) + (border-color . "black") + (cursor-color . "RoyalBlue2") + (foreground-color . "black") + (mouse-color . "black")) + ((gnus-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (:background "gainsboro" :foreground "dark slate gray")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (calendar-today-face ((t (:underline t)))) + (custom-button-face ((t (:background "gainsboro" :foreground "dark cyan")))) + (custom-documentation-face ((t (:background "gainsboro")))) + (diary-face ((t (:foreground "red")))) + (fg:black ((t (:foreground "black")))) + (font-lock-builtin-face ((t (:background "gainsboro" :foreground "medium orchid")))) + (font-lock-comment-face ((t (:background "gainsboro" :foreground "SteelBlue3")))) + (font-lock-constant-face ((t (:background "gainsboro" :foreground "orange3")))) + (font-lock-function-name-face ((t (:background "gainsboro" :foreground "blue3")))) + (font-lock-keyword-face ((t (:background "gainsboro" :foreground "red3")))) + (font-lock-string-face ((t (:background "gainsboro" :foreground "SpringGreen3")))) + (font-lock-type-face ((t (:background "gainsboro" :foreground "dark cyan")))) + (font-lock-variable-name-face ((t (:background "gainsboro" :foreground "purple2")))) + (font-lock-warning-face ((t (:bold t :background "gainsboro" :foreground "red")))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (gui-button-face ((t (:foreground "light grey")))) + (highlight ((t (:background "LightSteelBlue1")))) + (holiday-face ((t (:background "pink")))) + (ibuffer-marked-face ((t (:foreground "red")))) + (italic ((t (:italic t)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "dark slate gray" :foreground "gainsboro")))) + (modeline-buffer-id ((t (:background "dark slate gray" :foreground "gainsboro")))) + (modeline-mousable ((t (:background "dark slate gray" :foreground "gainsboro")))) + (modeline-mousable-minor-mode ((t (:background "dark slate gray" :foreground "gainsboro")))) + (region ((t (:background "lavender")))) + (secondary-selection ((t (:background "paleturquoise")))) + (sgml-comment-face ((t (:foreground "dark green")))) + (sgml-doctype-face ((t (:foreground "maroon")))) + (sgml-end-tag-face ((t (:foreground "blue2")))) + (sgml-entity-face ((t (:foreground "red2")))) + (sgml-ignored-face ((t (:background "gray90" :foreground "maroon")))) + (sgml-ms-end-face ((t (:foreground "maroon")))) + (sgml-ms-start-face ((t (:foreground "maroon")))) + (sgml-pi-face ((t (:foreground "maroon")))) + (sgml-sgml-face ((t (:foreground "maroon")))) + (sgml-short-ref-face ((t (:foreground "goldenrod")))) + (sgml-start-tag-face ((t (:foreground "blue2")))) + (show-paren-match-face ((t (:background "SlateGray1")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "dark turquoise" :foreground "white")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (underline ((t (:underline t))))))) + +(defun color-theme-montz () + "Color theme by Brady Montz, created 2001-03-08. +Black on Gray. +Includes dired, bbdb, font-lock, gnus, message, viper, and widget." + (interactive) + (color-theme-install + '(color-theme-montz + ((background-color . "gray80") + (background-mode . light) + (background-toolbar-color . "#cccccccccccc") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#7a7a7a7a7a7a") + (cursor-color . "Red3") + (foreground-color . "black") + (top-toolbar-shadow-color . "#f5f5f5f5f5f5") + (viper-saved-cursor-color-in-replace-mode . "Red3")) + ((gnus-mouse-face . highlight) + (paren-match-face . paren-face-match) + (paren-mismatch-face . paren-face-mismatch) + (paren-no-match-face . paren-face-no-match) + (smiley-mouse-face . highlight)) + (default ((t (nil)))) + (bbdb-company ((t (:italic t)))) + (bbdb-field-name ((t (:bold t)))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (:underline t)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (nil)))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t)))) + (dired-face-executable ((t (:foreground "SeaGreen")))) + (dired-face-flagged ((t (:background "LightSlateGray")))) + (dired-face-marked ((t (:background "PaleVioletRed")))) + (dired-face-permissions ((t (:background "grey75" :foreground "black")))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (dired-face-symlink ((t (:foreground "cyan")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (font-lock-builtin-face ((t (:foreground "red3")))) + (font-lock-comment-face ((t (:foreground "blue")))) + (font-lock-constant-face ((t (:foreground "red3")))) + (font-lock-doc-string-face ((t (:foreground "mediumvioletred")))) + (font-lock-function-name-face ((t (:foreground "firebrick")))) + (font-lock-keyword-face ((t (:bold t :foreground "black")))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:foreground "mediumvioletred")))) + (font-lock-type-face ((t (:foreground "darkgreen")))) + (font-lock-variable-name-face ((t (:foreground "black")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4")))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-picons-face ((t (:background "white" :foreground "black")))) + (gnus-picons-xbm-face ((t (:background "white" :foreground "black")))) + (gnus-signature-face ((t (:italic t)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-x-face ((t (:background "white" :foreground "black")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (nil)))) + (highlight ((t (:background "darkseagreen2")))) + (info-node ((t (:bold t)))) + (info-xref ((t (:bold t)))) + (isearch ((t (:background "paleturquoise")))) + (italic ((t (:italic t)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68" :foreground "black")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (nil)))) + (modeline-buffer-id ((t (:background "Gray80" :foreground "blue4")))) + (modeline-mousable ((t (:background "Gray80" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "Gray80" :foreground "green4")))) + (paren-face-match ((t (:background "turquoise")))) + (paren-face-mismatch ((t (:background "purple" :foreground "white")))) + (paren-face-no-match ((t (:background "yellow" :foreground "black")))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (text-cursor ((t (:background "Red3" :foreground "gray80")))) + (toolbar ((t (nil)))) + (underline ((t (:underline t)))) + (vertical-divider ((t (nil)))) + (viper-minibuffer-emacs-face ((t (:background "gray80" :foreground "black")))) + (viper-minibuffer-insert-face ((t (:background "gray80" :foreground "black")))) + (viper-minibuffer-vi-face ((t (:background "gray80" :foreground "black")))) + (viper-replace-overlay-face ((t (:background "black" :foreground "white")))) + (viper-search-face ((t (:background "black" :foreground "white")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "black" :foreground "white"))))))) + +(defun color-theme-aalto-light () + "Color theme by Jari Aalto, created 2001-03-08. +Black on light yellow. +Used for Win32 on a Nokia446Xpro monitor. +Includes cvs, font-lock, gnus, message, sgml, widget" + (interactive) + (color-theme-install + '(color-theme-aalto-light + ((background-color . "#FFFFE0") + (background-mode . light) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "black") + (mouse-color . "LawnGreen")) + ((gnus-mouse-face . highlight) + (list-matching-lines-face . bold) + (tinyreplace-:face . highlight) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (calendar-today-face ((t (:underline t)))) + (cvs-filename-face ((t (:foreground "blue4")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:bold t :foreground "blue4")))) + (cvs-marked-face ((t (:bold t :foreground "green3")))) + (cvs-msg-face ((t (:italic t)))) + (cvs-need-action-face ((t (:foreground "orange")))) + (cvs-unknown-face ((t (:foreground "red")))) + (diary-face ((t (:foreground "red")))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-test-ok-face ((t (:bold t :foreground "Green")))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:foreground "Firebrick")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-function-name-face ((t (:foreground "Blue")))) + (font-lock-keyword-face ((t (:foreground "Purple")))) + (font-lock-string-face ((t (:foreground "RosyBrown")))) + (font-lock-type-face ((t (:foreground "ForestGreen")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4")))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-signature-face ((t (:italic t)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (highlight ((t (:background "darkseagreen2")))) + (holiday-face ((t (:background "pink")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (italic ((t (:italic t)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "black" :foreground "white")))) + (modeline-buffer-id ((t (:background "black" :foreground "white")))) + (modeline-mousable ((t (:background "black" :foreground "white")))) + (modeline-mousable-minor-mode ((t (:background "black" :foreground "white")))) + (region ((t (:background "gray")))) + (secondary-selection ((t (:background "paleturquoise")))) + (sgml-comment-face ((t (:foreground "dark turquoise")))) + (sgml-doctype-face ((t (:foreground "red")))) + (sgml-end-tag-face ((t (:foreground "blue")))) + (sgml-entity-face ((t (:foreground "magenta")))) + (sgml-ignored-face ((t (:background "gray60" :foreground "gray40")))) + (sgml-ms-end-face ((t (:foreground "green")))) + (sgml-ms-start-face ((t (:foreground "green")))) + (sgml-pi-face ((t (:foreground "lime green")))) + (sgml-sgml-face ((t (:foreground "brown")))) + (sgml-short-ref-face ((t (:foreground "deep sky blue")))) + (sgml-start-tag-face ((t (:foreground "blue")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (underline ((t (:underline t)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85"))))))) + +(defun color-theme-aalto-dark () + "Color theme by Jari Aalto, created 2001-03-08. +White on Deep Sky Blue 3. +Used for Unix Exceed on a Nokia446Xpro monitor. +Includes font-lock, info, and message." + (interactive) + (color-theme-install + '(color-theme-aalto-dark + ((background-color . "DeepSkyBlue3") + (background-mode . dark) + (border-color . "black") + (cursor-color . "yellow") + (foreground-color . "white") + (mouse-color . "black")) + ((ispell-highlight-face . highlight) + (list-matching-lines-face . bold) + (tinyreplace-:face . highlight) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t :background "blue3" :foreground "white")))) + (bold-italic ((t (:italic t :bold t :foreground "blue3")))) + (calendar-today-face ((t (:underline t)))) + (diary-face ((t (:foreground "red")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:foreground "OrangeRed")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-function-name-face ((t (:foreground "LightSkyBlue")))) + (font-lock-keyword-face ((t (:foreground "Cyan")))) + (font-lock-string-face ((t (:foreground "LightSalmon")))) + (font-lock-type-face ((t (:foreground "PaleGreen")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (highlight ((t (:background "blue3" :foreground "white")))) + (holiday-face ((t (:background "pink")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (italic ((t (:italic t :background "gray")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "green4")))) + (message-header-name-face ((t (:foreground "DarkGreen")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow")))) + (message-header-other-face ((t (:foreground "#b00000")))) + (message-header-subject-face ((t (:foreground "green3")))) + (message-header-to-face ((t (:bold t :foreground "green2")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "blue3")))) + (modeline ((t (:background "white" :foreground "DeepSkyBlue3")))) + (modeline-buffer-id ((t (:background "white" :foreground "DeepSkyBlue3")))) + (modeline-mousable ((t (:background "white" :foreground "DeepSkyBlue3")))) + (modeline-mousable-minor-mode ((t (:background "white" :foreground "DeepSkyBlue3")))) + (region ((t (:background "gray")))) + (secondary-selection ((t (:background "darkslateblue")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (underline ((t (:underline t))))))) + +(defun color-theme-blippblopp () + "Color theme by Thomas Sicheritz-Ponten, created 2001-03-12. +Used by researchers at Uppsala University and the Center for Biological +Sequence Analysis at the Technical University of Denmark. (As some of my +swedish friends couldn't pronounce Sicheritz - they choose to transform +it to something more \"swedish\": Blippblopp :-) +Includes font-lock and message." + (interactive) + (color-theme-install + '(color-theme-blippblopp + ((background-color . "white") + (background-mode . light) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (cursor-color . "Red3") + (foreground-color . "black") + (mouse-color . "black") + (top-toolbar-shadow-color . "#fffffbeeffff") + (viper-saved-cursor-color-in-replace-mode . "Red3")) + ((ispell-highlight-face . highlight)) + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (excerpt ((t (:italic t)))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "NavyBlue")))) + (fg:black ((t (:foreground "black")))) + (fixed ((t (:bold t)))) + (font-lock-builtin-face ((t (:foreground "red3")))) + (font-lock-comment-face ((t (:foreground "orange")))) + (font-lock-constant-face ((t (:foreground "red3")))) + (font-lock-doc-string-face ((t (:foreground "darkgreen")))) + (font-lock-exit-face ((t (:foreground "green")))) + (font-lock-function-name-face ((t (:bold t :foreground "red")))) + (font-lock-keyword-face ((t (:bold t :foreground "steelblue")))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:foreground "green4")))) + (font-lock-type-face ((t (:bold t :foreground "blue")))) + (font-lock-variable-name-face ((t (:foreground "black")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (green ((t (:foreground "green")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "dimgray" :foreground "lemonchiffon")))) + (modeline-buffer-id ((t (:background "dimgray" :foreground "green3")))) + (modeline-mousable ((t (:background "dimgray" :foreground "orange")))) + (modeline-mousable-minor-mode ((t (:background "dimgray" :foreground "blue4")))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "gray65")))) + (secondary-selection ((t (:background "paleturquoise")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (text-cursor ((t (:background "Red3" :foreground "white")))) + (toolbar ((t (:background "Gray80")))) + (underline ((t (:underline t)))) + (vcursor ((t (:underline t :background "cyan" :foreground "blue")))) + (vertical-divider ((t (:background "Gray80")))) + (xref-keyword-face ((t (:foreground "blue")))) + (xref-list-pilot-face ((t (:foreground "navy")))) + (xref-list-symbol-face ((t (:foreground "navy")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "gray65"))))))) + +(defun color-theme-hober (&optional preview) + "Does all sorts of crazy stuff. +Originally based on color-theme-standard, so I probably still have some +setting that I haven't changed. I also liberally copied settings from +the other themes in this package. The end result isn't much like the +other ones; I hope you like it." + (interactive) + (color-theme-install + '(color-theme-hober + ((foreground-color . "#c0c0c0") + (background-color . "black") + (mouse-color . "black") + (cursor-color . "medium turquoise") + (border-color . "black") + (background-mode . dark)) + (default ((t (nil)))) + (modeline ((t (:foreground "white" :background "darkslateblue")))) + (modeline-buffer-id ((t (:foreground "white" :background "darkslateblue")))) + (modeline-mousable ((t (:foreground "white" :background "darkslateblue")))) + (modeline-mousable-minor-mode ((t (:foreground "white" :background "darkslateblue")))) + (highlight ((t (:foreground "black" :background "#c0c0c0")))) + (bold ((t (:bold t)))) + (italic ((t (:italic t)))) + (bold-italic ((t (:bold t :italic t)))) + (region ((t (:foreground "white" :background "darkslateblue")))) + (zmacs-region ((t (:foreground "white" :background "darkslateblue")))) + (secondary-selection ((t (:background "paleturquoise")))) + (underline ((t (:underline t)))) + (diary-face ((t (:foreground "red")))) + (calendar-today-face ((t (:underline t)))) + (holiday-face ((t (:background "pink")))) + (widget-documentation-face ((t (:foreground "dark green" :background "white")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red" :background "black")))) + (widget-field-face ((t (:background "gray85" :foreground "black")))) + (widget-single-line-field-face ((t (:background "gray85" :foreground "black")))) + (widget-inactive-face ((t (:foreground "dim gray" :background "red")))) + (fixed ((t (:bold t)))) + (excerpt ((t (:italic t)))) + (term-default-fg ((t (nil)))) + (term-default-bg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-bold ((t (:bold t)))) + (term-underline ((t (:underline t)))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-white ((t (:foreground "#c0c0c0")))) + (term-whitebg ((t (:background "#c0c0c0")))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (:background "black")))) + (term-red ((t (:foreground "#ef8171")))) + (term-redbg ((t (:background "#ef8171")))) + (term-green ((t (:foreground "#e5f779")))) + (term-greenbg ((t (:background "#e5f779")))) + (term-yellow ((t (:foreground "#fff796")))) + (term-yellowbg ((t (:background "#fff796")))) + (term-blue ((t (:foreground "#4186be")))) + (term-bluebg ((t (:background "#4186be")))) + (term-magenta ((t (:foreground "#ef9ebe")))) + (term-magentabg ((t (:background "#ef9ebe")))) + (term-cyan ((t (:foreground "#71bebe")))) + (term-cyanbg ((t (:background "#71bebe")))) + (font-lock-keyword-face ((t (:foreground "#00ffff")))) + (font-lock-comment-face ((t (:foreground "Red")))) + (font-lock-string-face ((t (:foreground "#ffff00")))) + (font-lock-constant-face ((t (:foreground "#00ff00")))) + (font-lock-builtin-face ((t (:foreground "#ffaa00")))) + (font-lock-type-face ((t (:foreground "Coral")))) + (font-lock-warning-face ((t (:foreground "Red" :bold t)))) + (font-lock-function-name-face ((t (:foreground "#4186be")))) + (font-lock-variable-name-face ((t (:foreground "white" :bold t)))) + (message-header-to-face ((t (:foreground "#4186be" :bold t)))) + (message-header-cc-face ((t (:foreground "#4186be")))) + (message-header-subject-face ((t (:foreground "#4186be" :bold t)))) + (message-header-newsgroups-face ((t (:foreground "Coral" :bold t)))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-name-face ((t (:foreground "white")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-separator-face ((t (:foreground "brown")))) + (message-cited-text-face ((t (:foreground "white")))) + (gnus-header-from-face ((t (:foreground "Coral")))) + (gnus-header-subject-face ((t (:foreground "#4186be")))) + (gnus-header-newsgroups-face ((t (:foreground "#4186be" :italic t)))) + (gnus-header-name-face ((t (:foreground "white")))) + (gnus-header-content-face ((t (:foreground "#4186be" :italic t)))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-list ((t (:bold nil :foreground "red")))) + (gnus-group-news-1-face ((t (:foreground "ForestGreen" :bold t)))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-2-face ((t (:foreground "CadetBlue4" :bold t)))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-low-face ((t (:foreground "DarkGreen" :bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-mail-1-face ((t (:foreground "DeepPink3" :bold t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-2-face ((t (:foreground "HotPink3" :bold t)))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-3-face ((t (:foreground "magenta4" :bold t)))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-low-face ((t (:foreground "DeepPink4" :bold t)))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-summary-cancelled-face ((t (:foreground "yellow" :background "black")))) + (gnus-summary-high-ticked-face ((t (:foreground "firebrick" :bold t)))) + (gnus-summary-low-ticked-face ((t (:foreground "firebrick" :italic t)))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-high-ancient-face ((t (:foreground "RoyalBlue" :bold t)))) + (gnus-summary-low-ancient-face ((t (:foreground "RoyalBlue" :italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-high-read-face ((t (:foreground "DarkGreen" :bold t)))) + (gnus-summary-low-read-face ((t (:foreground "DarkGreen" :italic t)))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t)))) + (gnus-emphasis-bold-italic ((t (:bold t :italic t)))) + (gnus-emphasis-underline-bold-italic ((t (:bold t :italic t :underline t)))) + (gnus-signature-face ((t (:foreground "white")))) + (gnus-cite-face-1 ((t (:foreground "Khaki")))) + (gnus-cite-face-2 ((t (:foreground "Coral")))) + (gnus-cite-face-3 ((t (:foreground "#4186be")))) + (gnus-cite-face-4 ((t (:foreground "yellow green")))) + (gnus-cite-face-5 ((t (:foreground "IndianRed")))) + (highlight-changes-face ((t (:foreground "red")))) + (highlight-changes-delete-face ((t (:foreground "red" :underline t)))) + (show-paren-match-face ((t (:foreground "white" :background "purple")))) + (show-paren-mismatch-face ((t (:foreground "white" :background "red")))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (cperl-array-face ((t (:foreground "Blue" :bold t :background "lightyellow2")))) + (cperl-hash-face ((t (:foreground "Red" :bold t :italic t :background "lightyellow2")))) + (makefile-space-face ((t (:background "hotpink")))) + (sgml-start-tag-face ((t (:foreground "mediumspringgreen")))) + (sgml-ignored-face ((t (:foreground "gray20" :background "gray60")))) + (sgml-doctype-face ((t (:foreground "orange")))) + (sgml-sgml-face ((t (:foreground "yellow")))) + (sgml-end-tag-face ((t (:foreground "greenyellow")))) + (sgml-entity-face ((t (:foreground "gold")))) + (flyspell-incorrect-face ((t (:foreground "OrangeRed" :bold t :underline t)))) + (flyspell-duplicate-face ((t (:foreground "Gold3" :bold t :underline t))))))) + +(defun color-theme-bharadwaj () + "Color theme by Girish Bharadwaj, created 2001-03-28. +Black on gainsboro. Includes BBDB, custom, cperl, cvs, dired, ediff, +erc, eshell, font-latex, font-lock, gnus, info, message, paren, sgml, +shell, speedbar, term, vhdl, viper, widget, woman, xref. Wow!" + (interactive) + (color-theme-install + '(color-theme-bharadwaj + ((background-color . "gainsboro") + (background-mode . light) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "black") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (cursor-color . "grey15") + (foreground-color . "black") + (mouse-color . "grey15") + (top-toolbar-shadow-color . "#fffffbeeffff") + (viper-saved-cursor-color-in-replace-mode . "Red3")) + ((gnus-mouse-face . highlight) + (smiley-mouse-face . highlight)) + (default ((t (nil)))) + (bbdb-company ((t (nil)))) + (bbdb-field-name ((t (:bold t)))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (:underline t)))) + (blank-space-face ((t (nil)))) + (blank-tab-face ((t (nil)))) + (blue ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:bold t)))) + (border-glyph ((t (nil)))) + (calendar-today-face ((t (:underline t)))) + (comint-input-face ((t (:foreground "deepskyblue")))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue")))) + (cperl-hash-face ((t (:bold t :background "lightyellow2" :foreground "Red")))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (custom-button-face ((t (:bold t)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :bold t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :bold t :foreground "blue")))) + (cvs-filename-face ((t (:foreground "blue4")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:bold t :foreground "blue4")))) + (cvs-marked-face ((t (:bold t :foreground "green3")))) + (cvs-msg-face ((t (nil)))) + (cvs-need-action-face ((t (:foreground "orange")))) + (cvs-unknown-face ((t (:foreground "red")))) + (diary-face ((t (:bold t :foreground "red")))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t :foreground "forestgreen")))) + (dired-face-executable ((t (:foreground "indianred")))) + (dired-face-flagged ((t (:background "SlateGray")))) + (dired-face-marked ((t (:background "darkblue" :foreground "deepskyblue")))) + (dired-face-permissions ((t (nil)))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (dired-face-symlink ((t (:foreground "grey95")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (erc-action-face ((t (:bold t)))) + (erc-bold-face ((t (:bold t)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (nil)))) + (erc-error-face ((t (:bold t)))) + (erc-input-face ((t (nil)))) + (erc-inverse-face ((t (nil)))) + (erc-notice-face ((t (nil)))) + (erc-pal-face ((t (nil)))) + (erc-prompt-face ((t (nil)))) + (erc-underline-face ((t (nil)))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid")))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-ls-directory-face ((t (:bold t :foreground "Blue")))) + (eshell-ls-executable-face ((t (:bold t :foreground "ForestGreen")))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red")))) + (eshell-ls-picture-face ((t (nil)))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta")))) + (eshell-ls-symlink-face ((t (:bold t :foreground "DarkCyan")))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:bold t :foreground "Red")))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-test-ok-face ((t (:bold t :foreground "Green")))) + (excerpt ((t (nil)))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "NavyBlue")))) + (fg:black ((t (:foreground "black")))) + (fixed ((t (:bold t)))) + (flyspell-duplicate-face ((t (:underline t :bold t :foreground "Gold3")))) + (flyspell-incorrect-face ((t (:underline t :bold t :foreground "OrangeRed")))) + (font-latex-bold-face ((t (nil)))) + (font-latex-italic-face ((t (nil)))) + (font-latex-math-face ((t (nil)))) + (font-latex-sedate-face ((t (nil)))) + (font-latex-string-face ((t (nil)))) + (font-latex-warning-face ((t (nil)))) + (font-lock-builtin-face ((t (:foreground "ForestGreen")))) + (font-lock-comment-face ((t (:foreground "grey55")))) + (font-lock-constant-face ((t (:foreground "OliveDrab")))) + (font-lock-doc-string-face ((t (:bold t :foreground "blue4")))) + (font-lock-exit-face ((t (nil)))) + (font-lock-function-name-face ((t (:italic t :bold t :foreground "SlateBlue")))) + (font-lock-keyword-face ((t (:foreground "DarkBlue")))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:foreground "DarkRed")))) + (font-lock-type-face ((t (:foreground "SteelBlue4")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "VioletRed")))) + (fringe ((t (:background "grey95")))) + (gnus-cite-attribution-face ((t (:bold t)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:bold t)))) + (gnus-emphasis-highlight-words ((t (nil)))) + (gnus-emphasis-italic ((t (nil)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t)))) + (gnus-filterhist-face-1 ((t (nil)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:foreground "indianred4")))) + (gnus-header-from-face ((t (:bold t :foreground "red3")))) + (gnus-header-name-face ((t (:bold t :foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:bold t :foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:bold t :foreground "red4")))) + (gnus-picons-face ((t (:background "white" :foreground "black")))) + (gnus-picons-xbm-face ((t (:background "white" :foreground "black")))) + (gnus-signature-face ((t (nil)))) + (gnus-splash ((t (nil)))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (nil)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (:bold t)))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-x-face ((t (:background "white" :foreground "black")))) + (green ((t (nil)))) + (gui-button-face ((t (:background "grey75")))) + (gui-element ((t (:background "Gray80")))) + (highlight ((t (:background "LightSkyBlue")))) + (highlight-changes-delete-face ((t (:underline t :foreground "red")))) + (highlight-changes-face ((t (:foreground "red")))) + (highline-face ((t (:background "grey95")))) + (holiday-face ((t (:background "pink")))) + (html-helper-italic-face ((t (nil)))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:bold t)))) + (info-xref ((t (:bold t)))) + (isearch ((t (:background "yellow")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (nil)))) + (lazy-highlight-face ((t (:bold t :foreground "dark magenta")))) + (left-margin ((t (nil)))) + (linemenu-face ((t (nil)))) + (list-mode-item-selected ((t (nil)))) + (makefile-space-face ((t (:background "hotpink")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:bold t)))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "white" :foreground "black")))) + (modeline-buffer-id ((t (:background "white" :foreground "black")))) + (modeline-mousable ((t (:background "white" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "white" :foreground "black")))) + (paren-blink-off ((t (:foreground "gray80")))) + (paren-face-match ((t (:background "turquoise")))) + (paren-face-mismatch ((t (:background "purple" :foreground "white")))) + (paren-face-no-match ((t (:background "yellow" :foreground "black")))) + (paren-match ((t (:background "darkseagreen2")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "black")))) + (paren-mismatch-face ((t (:bold t)))) + (paren-no-match-face ((t (:bold t)))) + (pointer ((t (nil)))) + (primary-selection ((t (nil)))) + (red ((t (nil)))) + (region ((t (:background "grey80")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "grey55")))) + (sgml-comment-face ((t (:foreground "dark turquoise")))) + (sgml-doctype-face ((t (nil)))) + (sgml-end-tag-face ((t (nil)))) + (sgml-entity-face ((t (nil)))) + (sgml-ignored-face ((t (nil)))) + (sgml-ms-end-face ((t (:foreground "green")))) + (sgml-ms-start-face ((t (:foreground "green")))) + (sgml-pi-face ((t (:foreground "lime green")))) + (sgml-sgml-face ((t (nil)))) + (sgml-short-ref-face ((t (:foreground "deep sky blue")))) + (sgml-start-tag-face ((t (nil)))) + (shell-option-face ((t (:foreground "blue")))) + (shell-output-2-face ((t (:foreground "darkseagreen")))) + (shell-output-3-face ((t (:foreground "slategrey")))) + (shell-output-face ((t (:foreground "palegreen")))) + (shell-prompt-face ((t (:foreground "red")))) + (show-paren-match-face ((t (:background "grey80")))) + (show-paren-mismatch-face ((t (:bold t :background "purple" :foreground "white")))) + (speedbar-button-face ((t (:bold t :foreground "green4")))) + (speedbar-directory-face ((t (:bold t :foreground "blue4")))) + (speedbar-file-face ((t (:bold t :foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (swbuff-current-buffer-face ((t (:bold t)))) + (template-message-face ((t (:bold t)))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (:background "black")))) + (term-blue ((t (:foreground "blue")))) + (term-bluebg ((t (:background "blue")))) + (term-bold ((t (:bold t)))) + (term-cyan ((t (:foreground "cyan")))) + (term-cyanbg ((t (:background "cyan")))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-green ((t (:foreground "green")))) + (term-greenbg ((t (:background "green")))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (:foreground "magenta")))) + (term-magentabg ((t (:background "magenta")))) + (term-red ((t (:foreground "red")))) + (term-redbg ((t (:background "red")))) + (term-underline ((t (:underline t)))) + (term-white ((t (:foreground "white")))) + (term-whitebg ((t (:background "white")))) + (term-yellow ((t (:foreground "yellow")))) + (term-yellowbg ((t (:background "yellow")))) + (text-cursor ((t (:background "grey15" :foreground "gainsboro")))) + (toolbar ((t (nil)))) + (underline ((t (:underline t)))) + (vc-annotate-face-0046FF ((t (nil)))) + (vcursor ((t (:underline t :background "cyan" :foreground "blue")))) + (vertical-divider ((t (nil)))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red")))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange")))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:underline t :foreground "Blue")))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:underline t :foreground "DarkGoldenrod")))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:underline t :foreground "ForestGreen")))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:underline t :foreground "Brown")))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:underline t :foreground "Grey50")))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (vvb-face ((t (:background "pink" :foreground "black")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "navy" :foreground "white")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "royalblue" :foreground "white")))) + (woman-bold-face ((t (:bold t)))) + (woman-italic-face ((t (nil)))) + (woman-unknown-face ((t (nil)))) + (xref-keyword-face ((t (:foreground "blue")))) + (xref-list-pilot-face ((t (:foreground "navy")))) + (xref-list-symbol-face ((t (:foreground "navy")))) + (yellow ((t (nil)))) + (zmacs-region ((t (:background "royalblue"))))))) + +(defun color-theme-oswald () + "Color theme by Tom Oswald, created 2001-04-18. +Green on black, includes font-lock, show-paren, and ediff." + (interactive) + (color-theme-install + '(color-theme-oswald + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "green") + (mouse-color . "black")) + ((blank-space-face . blank-space-face) + (blank-tab-face . blank-tab-face) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (blank-space-face ((t (:background "LightGray")))) + (blank-tab-face ((t (:background "green" :foreground "black")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (font-lock-builtin-face ((t (:italic t :bold t :foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:italic t :foreground "LightGoldenrod4")))) + (font-lock-constant-face ((t (:italic t :foreground "HotPink")))) + (font-lock-doc-string-face ((t (:italic t :foreground "orange")))) + (font-lock-function-name-face ((t (:italic t :bold t :foreground "red")))) + (font-lock-keyword-face ((t (:foreground "red")))) + (font-lock-preprocessor-face ((t (:italic t :foreground "HotPink")))) + (font-lock-string-face ((t (:italic t :foreground "orange")))) + (font-lock-reference-face ((t (:italic t :bold t :foreground "LightSteelBlue")))) + (font-lock-type-face ((t (:italic t :foreground "LightSlateBlue")))) + (font-lock-variable-name-face ((t (:underline t :foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (highlight ((t (:background "yellow" :foreground "red")))) + (isearch ((t (:background "dim gray" :foreground "aquamarine")))) + (ispell-face ((t (:bold t :background "#3454b4" :foreground "yellow")))) + (italic ((t (:italic t)))) + (modeline ((t (:background "green" :foreground "black")))) + (modeline-buffer-id ((t (:background "green" :foreground "black")))) + (modeline-mousable ((t (:background "green" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "green" :foreground "black")))) + (region ((t (:background "dim gray" :foreground "aquamarine")))) + (secondary-selection ((t (:background "darkslateblue" :foreground "light goldenrod")))) + (show-paren-match-face ((t (:background "turquoise" :foreground "black")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (underline ((t (:underline t)))) + (zmacs-region ((t (:background "dim gray" :foreground "aquamarine"))))))) + +(defun color-theme-salmon-diff () + "Salmon and aquamarine faces for diff and change-log modes. +This is intended for other color themes to use (eg. `color-theme-gnome2')." + (color-theme-install + '(color-theme-salmon-diff + nil + (change-log-acknowledgement-face ((t (:foreground "LightBlue")))) + (change-log-conditionals-face ((t (:bold t :weight bold :foreground "Aquamarine")))) + (change-log-date-face ((t (:foreground "LightSalmon")))) + (change-log-email-face ((t (:bold t :weight bold :foreground "Aquamarine")))) + (change-log-file-face ((t (:bold t :weight bold :foreground "Aquamarine")))) + (change-log-function-face ((t (:bold t :weight bold :foreground "Aquamarine")))) + (change-log-list-face ((t (:foreground "Salmon")))) + (change-log-name-face ((t (:foreground "Aquamarine")))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (:foreground "grey70")))) + (diff-file-header-face ((t (:bold t)))) + (diff-function-face ((t (:foreground "grey70")))) + (diff-header-face ((t (:foreground "light salmon")))) + (diff-hunk-header-face ((t (:foreground "light salmon")))) + (diff-index-face ((t (:bold t)))) + (diff-nonexistent-face ((t (:bold t)))) + (diff-removed-face ((t (nil)))) + (log-view-message-face ((t (:foreground "light salmon"))))))) + +(defun color-theme-robin-hood () + "`color-theme-gnome2' with navajo white on green. +This theme tries to avoid underlined and italic faces, because +the fonts either look ugly, or do not exist. The author himself +uses neep, for example." + (interactive) + (color-theme-gnome2) + (let ((color-theme-is-cumulative t)) + (color-theme-install + '(color-theme-robin-hood + ((foreground-color . "navajo white") + (background-color . "#304020")) + ((CUA-mode-read-only-cursor-color . "white") + (help-highlight-face . info-xref) + (list-matching-lines-buffer-name-face . bold)) + (default ((t (nil)))) + (button ((t (:bold t)))) + (calendar-today-face ((t (:foreground "lemon chiffon")))) + (custom-button-face ((t (:bold t :foreground "DodgerBlue1")))) + (diary-face ((t (:bold t :foreground "yellow")))) + (fringe ((t (:background "#003700")))) + (header-line ((t (:background "#030" :foreground "#AA7")))) + (holiday-face ((t (:bold t :foreground "peru")))) + (ido-subdir-face ((t (:foreground "MediumSlateBlue")))) + (isearch ((t (:foreground "pink" :background "red")))) + (isearch-lazy-highlight-face ((t (:foreground "red")))) + (menu ((t (:background "#304020" :foreground "navajo white")))) + (minibuffer-prompt ((t (:foreground "pale green")))) + (modeline ((t (:background "dark olive green" :foreground "wheat" :box (:line-width 1 :style released-button))))) + (mode-line-inactive ((t (:background "dark olive green" :foreground "khaki" :box (:line-width 1 :style released-button))))) + (semantic-dirty-token-face ((t (:background "grey22")))) + (tool-bar ((t (:background "#304020" :foreground "wheat" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lemon chiffon" :foreground "black")))))))) + +(defun color-theme-snowish () + "Color theme by Girish Bharadwaj, created 2001-05-17. +Dark slate gray on snow2, lots of blue colors. +Includes custom, eshell, font-lock, gnus, html-helper, +hyper-apropos, jde, message, paren, semantic, speedbar, +term, widget." + (interactive) + (color-theme-install + '(color-theme-snowish + ((background-color . "snow2") + (background-mode . light) + (cursor-color . "Red3") + (foreground-color . "darkslategray")) + ((buffers-tab-face . buffers-tab) + (gnus-mouse-face . highlight) + (sgml-set-face . t) + (smiley-mouse-face . highlight)) + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t :foreground "peru")))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (nil)))) + (buffers-tab ((t (:background "snow2" :foreground "darkslategray")))) + (custom-button-face ((t (:bold t)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "gray85")))) + (custom-comment-tag-face ((t (:foreground "blue4")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (cyan ((t (:foreground "cyan")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid")))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-ls-directory-face ((t (:bold t :foreground "Blue")))) + (eshell-ls-executable-face ((t (:bold t :foreground "ForestGreen")))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red")))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta")))) + (eshell-ls-symlink-face ((t (:bold t :foreground "Dark Cyan")))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:bold t :foreground "Red")))) + (font-lock-builtin-face ((t (:underline t :foreground "blue")))) + (font-lock-comment-face ((t (:foreground "snow4")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-doc-string-face ((t (:foreground "mediumblue")))) + (font-lock-function-name-face ((t (:bold t :foreground "darkblue")))) + (font-lock-keyword-face ((t (:bold t :foreground "dodgerblue")))) + (font-lock-preprocessor-face ((t (:underline t :foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:foreground "darkviolet")))) + (font-lock-type-face ((t (:foreground "goldenrod")))) + (font-lock-variable-name-face ((t (:foreground "tomato")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (gnus-cite-attribution-face ((t (nil)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (nil)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (nil)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t)))) + (gnus-emphasis-underline-italic ((t (:underline t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:foreground "indianred4")))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-picons-face ((t (:background "white" :foreground "black")))) + (gnus-picons-xbm-face ((t (:background "white" :foreground "black")))) + (gnus-signature-face ((t (nil)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (nil)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-x-face ((t (:background "white" :foreground "black")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:background "#D4D0C8" :foreground "black")))) + (highlight ((t (:background "darkseagreen2")))) + (html-helper-bold-face ((t (:bold t)))) + (html-helper-bold-italic-face ((t (nil)))) + (html-helper-builtin-face ((t (:underline t :foreground "blue3")))) + (html-helper-italic-face ((t (:foreground "medium sea green")))) + (html-helper-underline-face ((t (:underline t)))) + (html-tag-face ((t (:bold t)))) + (hyper-apropos-documentation ((t (:foreground "darkred")))) + (hyper-apropos-heading ((t (:bold t)))) + (hyper-apropos-hyperlink ((t (:foreground "blue4")))) + (hyper-apropos-major-heading ((t (:bold t)))) + (hyper-apropos-section-heading ((t (nil)))) + (hyper-apropos-warning ((t (:bold t :foreground "red")))) + (info-menu-6 ((t (nil)))) + (isearch ((t (:background "paleturquoise")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (nil)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-bug-breakpoint-marker ((t (:background "yellow" :foreground "red")))) + (jde-java-font-lock-link-face ((t (:underline t :foreground "blue")))) + (jde-java-font-lock-number-face ((t (:foreground "RosyBrown")))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68" :foreground "darkslategray")))) + (magenta ((t (:foreground "magenta")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (nil)))) + (modeline-buffer-id ((t (:background "#D4D0C8" :foreground "blue4")))) + (modeline-mousable ((t (:background "#D4D0C8" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "#D4D0C8" :foreground "green4")))) + (paren-blink-off ((t (:foreground "snow2")))) + (paren-match ((t (:background "darkseagreen2")))) + (paren-mismatch ((t (:background "snow2" :foreground "darkslategray")))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (semantic-intangible-face ((t (:foreground "gray25")))) + (semantic-read-only-face ((t (:background "gray25")))) + (senator-momentary-highlight-face ((t (:background "gray70")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (template-message-face ((t (:bold t)))) + (term-blue-bold-face ((t (:bold t :background "snow2" :foreground "blue")))) + (term-blue-face ((t (:foreground "blue")))) + (term-blue-inv-face ((t (:background "blue")))) + (term-blue-ul-face ((t (:underline t :background "snow2" :foreground "blue")))) + (term-cyan-bold-face ((t (:bold t :background "snow2" :foreground "cyan")))) + (term-cyan-face ((t (:foreground "cyan")))) + (term-cyan-inv-face ((t (:background "cyan")))) + (term-cyan-ul-face ((t (:underline t :background "snow2" :foreground "cyan")))) + (term-default-bold-face ((t (:bold t :background "snow2" :foreground "darkslategray")))) + (term-default-face ((t (:background "snow2" :foreground "darkslategray")))) + (term-default-inv-face ((t (:background "darkslategray" :foreground "snow2")))) + (term-default-ul-face ((t (:underline t :background "snow2" :foreground "darkslategray")))) + (term-green-bold-face ((t (:bold t :background "snow2" :foreground "green")))) + (term-green-face ((t (:foreground "green")))) + (term-green-inv-face ((t (:background "green")))) + (term-green-ul-face ((t (:underline t :background "snow2" :foreground "green")))) + (term-magenta-bold-face ((t (:bold t :background "snow2" :foreground "magenta")))) + (term-magenta-face ((t (:foreground "magenta")))) + (term-magenta-inv-face ((t (:background "magenta")))) + (term-magenta-ul-face ((t (:underline t :background "snow2" :foreground "magenta")))) + (term-red-bold-face ((t (:bold t :background "snow2" :foreground "red")))) + (term-red-face ((t (:foreground "red")))) + (term-red-inv-face ((t (:background "red")))) + (term-red-ul-face ((t (:underline t :background "snow2" :foreground "red")))) + (term-white-bold-face ((t (:bold t :background "snow2" :foreground "white")))) + (term-white-face ((t (:foreground "white")))) + (term-white-inv-face ((t (:background "snow2")))) + (term-white-ul-face ((t (:underline t :background "snow2" :foreground "white")))) + (term-yellow-bold-face ((t (:bold t :background "snow2" :foreground "yellow")))) + (term-yellow-face ((t (:foreground "yellow")))) + (term-yellow-inv-face ((t (:background "yellow")))) + (term-yellow-ul-face ((t (:underline t :background "snow2" :foreground "yellow")))) + (text-cursor ((t (:background "Red3" :foreground "snow2")))) + (toolbar ((t (nil)))) + (underline ((t (:underline t)))) + (vertical-divider ((t (nil)))) + (white ((t (:foreground "white")))) + (widget ((t (nil)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "gray65"))))))) + +(defun color-theme-dark-laptop () + "Color theme by Laurent Michel, created 2001-05-24. +Includes custom, fl, font-lock, gnus, message, widget." + (interactive) + (color-theme-install + '(color-theme-dark-laptop + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "yellow") + (foreground-color . "white") + (mouse-color . "sienna1")) + ((gnus-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "light blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "pink")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "lime green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "light blue")))) + (fl-comment-face ((t (:foreground "pink")))) + (fl-doc-string-face ((t (:foreground "purple")))) + (fl-function-name-face ((t (:foreground "red")))) + (fl-keyword-face ((t (:foreground "cyan")))) + (fl-string-face ((t (:foreground "green")))) + (fl-type-face ((t (:foreground "yellow")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:foreground "OrangeRed")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-doc-string-face ((t (:foreground "LightSalmon")))) + (font-lock-function-name-face ((t (:foreground "LightSkyBlue")))) + (font-lock-keyword-face ((t (:foreground "Cyan")))) + (font-lock-preprocessor-face ((t (:foreground "Aquamarine")))) + (font-lock-reference-face ((t (:foreground "LightSteelBlue")))) + (font-lock-string-face ((t (:foreground "LightSalmon")))) + (font-lock-type-face ((t (:foreground "PaleGreen")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:bold t :foreground "deep sky blue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:bold t :foreground "cyan")))) + (gnus-cite-face-3 ((t (:bold t :foreground "gold")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:bold t :foreground "chocolate")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1")))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2")))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "aquamarine3")))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4")))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise")))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise")))) + (gnus-header-content-face ((t (:italic t :foreground "forest green")))) + (gnus-header-from-face ((t (:bold t :foreground "spring green")))) + (gnus-header-name-face ((t (:foreground "deep sky blue")))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "purple")))) + (gnus-header-subject-face ((t (:bold t :foreground "orange")))) + (gnus-signature-face ((t (:bold t :foreground "khaki")))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "pink")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "pink")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (highlight ((t (:background "darkolivegreen")))) + (italic ((t (:italic t)))) + (message-cited-text-face ((t (:bold t :foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "green4")))) + (message-header-name-face ((t (:bold t :foreground "orange")))) + (message-header-newsgroups-face ((t (:bold t :foreground "violet")))) + (message-header-other-face ((t (:bold t :foreground "chocolate")))) + (message-header-subject-face ((t (:bold t :foreground "yellow")))) + (message-header-to-face ((t (:bold t :foreground "cyan")))) + (message-header-xheader-face ((t (:bold t :foreground "light blue")))) + (message-mml-face ((t (:bold t :background "Green3")))) + (message-separator-face ((t (:foreground "blue3")))) + (modeline ((t (:background "white" :foreground "black")))) + (modeline-buffer-id ((t (:background "white" :foreground "black")))) + (modeline-mousable ((t (:background "white" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "white" :foreground "black")))) + (region ((t (:background "blue")))) + (primary-selection ((t (:background "blue")))) + (isearch ((t (:background "blue")))) + (zmacs-region ((t (:background "blue")))) + (secondary-selection ((t (:background "darkslateblue")))) + (underline ((t (:underline t)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray"))))))) + +(defun color-theme-taming-mr-arneson () + "Color theme by Erik Arneson, created 2001-06-12. +Light sky blue on black. Includes bbdb, cperl, custom, cvs, diff, +dired, font-lock, html-helper, hyper-apropos, info, isearch, man, +message, paren, shell, and widget." + (interactive) + (color-theme-install + '(color-theme-taming-mr-arneson + ((background-color . "black") + (background-mode . light) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (cursor-color . "Red3") + (foreground-color . "LightSkyBlue") + (top-toolbar-shadow-color . "#fffffbeeffff")) + ((buffers-tab-face . buffers-tab) + (cperl-here-face . font-lock-string-face) + (cperl-invalid-face quote default) + (cperl-pod-face . font-lock-comment-face) + (cperl-pod-head-face . font-lock-variable-name-face) + (ispell-highlight-face . highlight) + (vc-mode-face . highlight) + (vm-highlight-url-face . bold-italic) + (vm-highlighted-header-face . bold) + (vm-mime-button-face . gui-button-face) + (vm-summary-highlight-face . bold)) + (default ((t (nil)))) + (bbdb-company ((t (nil)))) + (bbdb-field-name ((t (:bold t)))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (:underline t)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:bold t :foreground "yellow")))) + (border-glyph ((t (nil)))) + (buffers-tab ((t (:background "black" :foreground "LightSkyBlue")))) + (cperl-array-face ((t (:bold t :foreground "SkyBlue2")))) + (cperl-hash-face ((t (:foreground "LightBlue2")))) + (cperl-invalid-face ((t (:foreground "white")))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (custom-button-face ((t (:bold t)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:foreground "white")))) + (custom-comment-tag-face ((t (:foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "white")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (cvs-filename-face ((t (:foreground "white")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:foreground "green")))) + (cvs-marked-face ((t (:bold t :foreground "green3")))) + (cvs-msg-face ((t (:foreground "red")))) + (cvs-need-action-face ((t (:foreground "yellow")))) + (cvs-unknown-face ((t (:foreground "grey")))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-file-header-face ((t (:bold t :background "grey70")))) + (diff-hunk-header-face ((t (:background "grey85")))) + (diff-index-face ((t (:bold t :background "grey70")))) + (diff-removed-face ((t (nil)))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t :foreground "SkyBlue2")))) + (dired-face-executable ((t (:foreground "Green")))) + (dired-face-flagged ((t (:background "LightSlateGray")))) + (dired-face-header ((t (:background "grey75" :foreground "black")))) + (dired-face-marked ((t (:background "PaleVioletRed")))) + (dired-face-permissions ((t (:background "grey75" :foreground "black")))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (dired-face-symlink ((t (:foreground "cyan")))) + (excerpt ((t (nil)))) + (fixed ((t (:bold t)))) + (font-lock-builtin-face ((t (:foreground "red3")))) + (font-lock-comment-face ((t (:foreground "red")))) + (font-lock-constant-face ((t (nil)))) + (font-lock-doc-string-face ((t (:foreground "turquoise")))) + (font-lock-function-name-face ((t (:foreground "white")))) + (font-lock-keyword-face ((t (:foreground "green")))) + (font-lock-preprocessor-face ((t (:foreground "green3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:foreground "turquoise")))) + (font-lock-type-face ((t (:foreground "steelblue")))) + (font-lock-variable-name-face ((t (:foreground "magenta2")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (nil)))) + (highlight ((t (:background "darkseagreen2" :foreground "blue")))) + (html-helper-bold-face ((t (:bold t)))) + (html-helper-italic-face ((t (:bold t :foreground "yellow")))) + (html-helper-underline-face ((t (:underline t)))) + (hyper-apropos-documentation ((t (:foreground "white")))) + (hyper-apropos-heading ((t (:bold t)))) + (hyper-apropos-hyperlink ((t (:foreground "sky blue")))) + (hyper-apropos-major-heading ((t (:bold t)))) + (hyper-apropos-section-heading ((t (:bold t)))) + (hyper-apropos-warning ((t (:bold t :foreground "red")))) + (info-node ((t (:bold t :foreground "yellow")))) + (info-xref ((t (:bold t)))) + (isearch ((t (:background "paleturquoise" :foreground "dark red")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (:bold t :foreground "yellow")))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68" :foreground "dark green")))) + (man-bold ((t (:bold t)))) + (man-heading ((t (:bold t)))) + (man-italic ((t (:foreground "yellow")))) + (man-xref ((t (:underline t)))) + (message-cited-text ((t (:foreground "orange")))) + (message-header-contents ((t (:foreground "white")))) + (message-headers ((t (:bold t :foreground "orange")))) + (message-highlighted-header-contents ((t (:bold t)))) + (message-url ((t (:bold t :foreground "pink")))) + (mmm-face ((t (:background "black" :foreground "green")))) + (modeline ((t (nil)))) + (modeline-buffer-id ((t (:background "Gray80" :foreground "blue4")))) + (modeline-mousable ((t (:background "Gray80" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "Gray80" :foreground "green4")))) + (paren-blink-off ((t (:foreground "gray80")))) + (paren-match ((t (:background "dark blue")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "LightSkyBlue")))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray65" :foreground "DarkBlue")))) + (red ((t (:foreground "red")))) + (region ((t (:background "gray65" :foreground "DarkBlue")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise" :foreground "black")))) + (shell-option-face ((t (:foreground "blue4")))) + (shell-output-2-face ((t (:foreground "green4")))) + (shell-output-3-face ((t (:foreground "green4")))) + (shell-output-face ((t (:bold t)))) + (shell-prompt-face ((t (:foreground "red4")))) + (text-cursor ((t (:background "Red3" :foreground "black")))) + (toolbar ((t (:background "Gray80" :foreground "black")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (nil)))) + (vm-xface ((t (:background "white" :foreground "black")))) + (vmpc-pre-sig-face ((t (:foreground "forestgreen")))) + (vmpc-sig-face ((t (:foreground "steelblue")))) + (widget ((t (nil)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85" :foreground "black")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (x-face ((t (:background "white" :foreground "black")))) + (xrdb-option-name-face ((t (:foreground "red")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "gray65"))))))) + +(defun color-theme-digital-ofs1 () + "Color theme by Gareth Owen, created 2001-06-13. +This works well on an old, beat-up Digital Unix box with its 256 colour +display, on which other color themes hog too much of the palette. +Black on some shade of dark peach. Includes bbdb, cperl, custom, +cvs, diff, dired, ediff, erc, eshell, font-latex, font-lock, gnus, +highlight, hproperty, html-helper, hyper-apropos, info, jde, man, +message, paren, searchm, semantic, sgml, shell, speedbar, term, +vhdl, viper, w3m, widget, woman, x-symbol, xref." + (interactive) + (color-theme-install + '(color-theme-digital-ofs1 + ((background-color . "#CA94AA469193") + (background-mode . light) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "black") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (cursor-color . "Black") + (foreground-color . "Black") + (mouse-color . "Black") + (top-toolbar-shadow-color . "#fffffbeeffff") + (viper-saved-cursor-color-in-replace-mode . "Red3")) + ((Man-overstrike-face . bold) + (Man-underline-face . underline) + (gnus-mouse-face . highlight) + (goto-address-mail-face . italic) + (goto-address-mail-mouse-face . secondary-selection) + (goto-address-url-face . bold) + (goto-address-url-mouse-face . highlight) + (ispell-highlight-face . highlight) + (list-matching-lines-face . bold) + (rmail-highlight-face . font-lock-function-name-face) + (view-highlight-face . highlight)) + (default ((t (:bold t)))) + (bbdb-company ((t (:italic t)))) + (bbdb-field-name ((t (:bold t)))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (:underline t)))) + (blank-space-face ((t (nil)))) + (blank-tab-face ((t (nil)))) + (blue ((t (:bold t :foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (:bold t)))) + (buffers-tab ((t (:background "black" :foreground "LightSkyBlue")))) + (calendar-today-face ((t (:underline t :bold t :foreground "white")))) + (comint-input-face ((t (nil)))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue")))) + (cperl-hash-face ((t (:italic t :bold t :background "lightyellow2" :foreground "Red")))) + (cperl-here-face ((t (nil)))) + (cperl-invalid-face ((t (:foreground "white")))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (cperl-pod-face ((t (nil)))) + (cperl-pod-head-face ((t (nil)))) + (custom-button-face ((t (:bold t)))) + (custom-changed-face ((t (:bold t :background "blue" :foreground "white")))) + (custom-comment-face ((t (:foreground "white")))) + (custom-comment-tag-face ((t (:foreground "white")))) + (custom-documentation-face ((t (:bold t)))) + (custom-face-tag-face ((t (:underline t :bold t)))) + (custom-group-tag-face ((t (:underline t :bold t :foreground "DarkBlue")))) + (custom-group-tag-face-1 ((t (:underline t :bold t :foreground "red")))) + (custom-invalid-face ((t (:bold t :background "red" :foreground "yellow")))) + (custom-modified-face ((t (:bold t :background "blue" :foreground "white")))) + (custom-rogue-face ((t (:bold t :background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t :bold t)))) + (custom-set-face ((t (:bold t :background "white" :foreground "blue")))) + (custom-state-face ((t (:bold t :foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :bold t :foreground "blue")))) + (cvs-filename-face ((t (:foreground "white")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:bold t :foreground "green")))) + (cvs-marked-face ((t (:bold t :foreground "green3")))) + (cvs-msg-face ((t (:italic t :foreground "red")))) + (cvs-need-action-face ((t (:foreground "yellow")))) + (cvs-unknown-face ((t (:foreground "grey")))) + (cyan ((t (:foreground "cyan")))) + (diary-face ((t (:bold t :foreground "red")))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-file-header-face ((t (:bold t :background "grey70")))) + (diff-hunk-header-face ((t (:background "grey85")))) + (diff-index-face ((t (:bold t :background "grey70")))) + (diff-removed-face ((t (nil)))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t)))) + (dired-face-executable ((t (:foreground "SeaGreen")))) + (dired-face-flagged ((t (:background "LightSlateGray")))) + (dired-face-header ((t (:background "grey75" :foreground "black")))) + (dired-face-marked ((t (:background "PaleVioletRed")))) + (dired-face-permissions ((t (:background "grey75" :foreground "black")))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (dired-face-symlink ((t (:foreground "cyan")))) + (display-time-mail-balloon-enhance-face ((t (:bold t :background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:bold t :foreground "blue")))) + (display-time-time-balloon-face ((t (:bold t :foreground "red")))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (erc-action-face ((t (:bold t)))) + (erc-bold-face ((t (:bold t)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (nil)))) + (erc-error-face ((t (:bold t)))) + (erc-input-face ((t (nil)))) + (erc-inverse-face ((t (nil)))) + (erc-notice-face ((t (nil)))) + (erc-pal-face ((t (nil)))) + (erc-prompt-face ((t (nil)))) + (erc-underline-face ((t (nil)))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid")))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-ls-directory-face ((t (:bold t :foreground "Blue")))) + (eshell-ls-executable-face ((t (:bold t :foreground "ForestGreen")))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red")))) + (eshell-ls-picture-face ((t (:foreground "Violet")))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta")))) + (eshell-ls-symlink-face ((t (:bold t :foreground "DarkCyan")))) + (eshell-ls-text-face ((t (:foreground "medium aquamarine")))) + (eshell-ls-todo-face ((t (:bold t :foreground "aquamarine")))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:bold t :foreground "Red")))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-test-ok-face ((t (:bold t :foreground "Green")))) + (excerpt ((t (:italic t)))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "NavyBlue")))) + (fg:black ((t (:foreground "black")))) + (fixed ((t (:bold t)))) + (fl-comment-face ((t (:foreground "medium purple")))) + (fl-doc-string-face ((t (nil)))) + (fl-function-name-face ((t (:foreground "green")))) + (fl-keyword-face ((t (:foreground "LightGreen")))) + (fl-string-face ((t (:foreground "light coral")))) + (fl-type-face ((t (:foreground "cyan")))) + (flyspell-duplicate-face ((t (:underline t :bold t :foreground "Gold3")))) + (flyspell-incorrect-face ((t (:underline t :bold t :foreground "OrangeRed")))) + (font-latex-bold-face ((t (:bold t)))) + (font-latex-italic-face ((t (:italic t)))) + (font-latex-math-face ((t (nil)))) + (font-latex-sedate-face ((t (nil)))) + (font-latex-string-face ((t (nil)))) + (font-latex-warning-face ((t (nil)))) + (font-lock-builtin-face ((t (:italic t :bold t :foreground "Orchid")))) + (font-lock-comment-face ((t (:bold t :foreground "Firebrick")))) + (font-lock-constant-face ((t (:italic t :bold t :foreground "CadetBlue")))) + (font-lock-doc-string-face ((t (:italic t :bold t :foreground "green4")))) + (font-lock-emphasized-face ((t (:bold t)))) + (font-lock-exit-face ((t (:foreground "green")))) + (font-lock-function-name-face ((t (:italic t :bold t :foreground "Blue")))) + (font-lock-keyword-face ((t (:bold t :foreground "dark olive green")))) + (font-lock-other-emphasized-face ((t (:italic t :bold t)))) + (font-lock-other-type-face ((t (:bold t :foreground "DarkBlue")))) + (font-lock-preprocessor-face ((t (:italic t :bold t :foreground "blue3")))) + (font-lock-reference-face ((t (:italic t :bold t :foreground "red3")))) + (font-lock-special-comment-face ((t (nil)))) + (font-lock-special-keyword-face ((t (nil)))) + (font-lock-string-face ((t (:italic t :bold t :foreground "DarkBlue")))) + (font-lock-type-face ((t (:italic t :bold t :foreground "DarkGreen")))) + (font-lock-variable-name-face ((t (:italic t :bold t :foreground "darkgreen")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (fringe ((t (:background "grey95")))) + (gdb-arrow-face ((t (:bold t)))) + (gnus-cite-attribution-face ((t (:italic t :bold t)))) + (gnus-cite-face-1 ((t (:bold t :foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:bold t :foreground "firebrick")))) + (gnus-cite-face-3 ((t (:bold t :foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:bold t :foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-cite-face-list ((t (nil)))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-filterhist-face-1 ((t (nil)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4")))) + (gnus-header-from-face ((t (:bold t :foreground "red3")))) + (gnus-header-name-face ((t (:bold t :foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:bold t :foreground "red4")))) + (gnus-picons-face ((t (:background "white" :foreground "black")))) + (gnus-picons-xbm-face ((t (:background "white" :foreground "black")))) + (gnus-signature-face ((t (:italic t :bold t)))) + (gnus-splash ((t (nil)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:italic t :bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :bold t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (:bold t)))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-x-face ((t (:background "white" :foreground "black")))) + (green ((t (:bold t :foreground "green")))) + (gui-button-face ((t (:bold t :background "grey75" :foreground "black")))) + (gui-element ((t (:bold t :background "Gray80")))) + (highlight ((t (:bold t :background "darkseagreen2")))) + (highlight-changes-delete-face ((t (:underline t :foreground "red")))) + (highlight-changes-face ((t (:foreground "red")))) + (highline-face ((t (:background "black" :foreground "white")))) + (holiday-face ((t (:bold t :background "pink" :foreground "white")))) + (hproperty:but-face ((t (:bold t)))) + (hproperty:flash-face ((t (:bold t)))) + (hproperty:highlight-face ((t (:bold t)))) + (hproperty:item-face ((t (:bold t)))) + (html-helper-bold-face ((t (:bold t)))) + (html-helper-bold-italic-face ((t (nil)))) + (html-helper-builtin-face ((t (:underline t :foreground "blue3")))) + (html-helper-italic-face ((t (:italic t :bold t :foreground "yellow")))) + (html-helper-underline-face ((t (:underline t)))) + (html-tag-face ((t (:bold t)))) + (hyper-apropos-documentation ((t (:foreground "white")))) + (hyper-apropos-heading ((t (:bold t)))) + (hyper-apropos-hyperlink ((t (:foreground "sky blue")))) + (hyper-apropos-major-heading ((t (:bold t)))) + (hyper-apropos-section-heading ((t (:bold t)))) + (hyper-apropos-warning ((t (:bold t :foreground "red")))) + (ibuffer-marked-face ((t (:foreground "red")))) + (info-menu-5 ((t (:underline t :bold t)))) + (info-menu-6 ((t (nil)))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (isearch ((t (:bold t :background "paleturquoise")))) + (isearch-secondary ((t (:foreground "red3")))) + (ispell-face ((t (:bold t)))) + (italic ((t (:italic t :bold t)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-bug-breakpoint-marker ((t (:background "yellow" :foreground "red")))) + (jde-java-font-lock-link-face ((t (:underline t :foreground "blue")))) + (jde-java-font-lock-number-face ((t (:foreground "RosyBrown")))) + (lazy-highlight-face ((t (:bold t :foreground "dark magenta")))) + (left-margin ((t (:bold t)))) + (linemenu-face ((t (nil)))) + (list-mode-item-selected ((t (:bold t :background "gray68")))) + (magenta ((t (:foreground "magenta")))) + (makefile-space-face ((t (:background "hotpink")))) + (man-bold ((t (:bold t)))) + (man-heading ((t (:bold t)))) + (man-italic ((t (:foreground "yellow")))) + (man-xref ((t (:underline t)))) + (message-cited-text ((t (:bold t :foreground "orange")))) + (message-cited-text-face ((t (:bold t :foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-contents ((t (:italic t :bold t :foreground "white")))) + (message-header-name-face ((t (:bold t :foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:bold t :foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:bold t :foreground "blue")))) + (message-headers ((t (:bold t :foreground "orange")))) + (message-highlighted-header-contents ((t (:bold t)))) + (message-mml-face ((t (:bold t :foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (message-url ((t (:bold t :foreground "pink")))) + (mmm-face ((t (:background "black" :foreground "green")))) + (modeline ((t (:bold t :background "Black" :foreground "#CA94AA469193")))) + (modeline-buffer-id ((t (:bold t :background "Gray80" :foreground "blue4")))) + (modeline-mousable ((t (:bold t :background "Gray80" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:bold t :background "Gray80" :foreground "green4")))) + (my-tab-face ((t (nil)))) + (nil ((t (nil)))) + (p4-diff-del-face ((t (:bold t)))) + (paren-blink-off ((t (:foreground "gray80")))) + (paren-face ((t (nil)))) + (paren-face-match ((t (nil)))) + (paren-face-mismatch ((t (nil)))) + (paren-face-no-match ((t (nil)))) + (paren-match ((t (:background "darkseagreen2")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "black")))) + (paren-mismatch-face ((t (:bold t :background "DeepPink" :foreground "white")))) + (paren-no-match-face ((t (:bold t :background "yellow" :foreground "white")))) + (pointer ((t (:bold t)))) + (primary-selection ((t (:bold t :background "gray65")))) + (red ((t (:bold t :foreground "red")))) + (region ((t (:bold t :background "gray")))) + (right-margin ((t (:bold t)))) + (searchm-buffer ((t (:bold t)))) + (searchm-button ((t (:bold t)))) + (searchm-field ((t (nil)))) + (searchm-field-label ((t (:bold t)))) + (searchm-highlight ((t (:bold t)))) + (secondary-selection ((t (:bold t :background "paleturquoise")))) + (semantic-intangible-face ((t (:foreground "gray25")))) + (semantic-read-only-face ((t (:background "gray25")))) + (senator-momentary-highlight-face ((t (:background "gray70")))) + (setnu-line-number-face ((t (:italic t :bold t)))) + (sgml-comment-face ((t (:foreground "dark green")))) + (sgml-doctype-face ((t (:foreground "maroon")))) + (sgml-end-tag-face ((t (:foreground "blue2")))) + (sgml-entity-face ((t (:foreground "red2")))) + (sgml-ignored-face ((t (:background "gray90" :foreground "maroon")))) + (sgml-ms-end-face ((t (:foreground "maroon")))) + (sgml-ms-start-face ((t (:foreground "maroon")))) + (sgml-pi-face ((t (:foreground "maroon")))) + (sgml-sgml-face ((t (:foreground "maroon")))) + (sgml-short-ref-face ((t (:foreground "goldenrod")))) + (sgml-start-tag-face ((t (:foreground "blue2")))) + (shell-input-face ((t (:bold t)))) + (shell-option-face ((t (:bold t :foreground "blue4")))) + (shell-output-2-face ((t (:bold t :foreground "green4")))) + (shell-output-3-face ((t (:bold t :foreground "green4")))) + (shell-output-face ((t (:bold t)))) + (shell-prompt-face ((t (:bold t :foreground "red4")))) + (show-paren-match-face ((t (:bold t :background "turquoise")))) + (show-paren-mismatch-face ((t (:bold t :background "purple" :foreground "white")))) + (speedbar-button-face ((t (:bold t :foreground "magenta")))) + (speedbar-directory-face ((t (:bold t :foreground "orchid")))) + (speedbar-file-face ((t (:bold t :foreground "pink")))) + (speedbar-highlight-face ((t (:background "black")))) + (speedbar-selected-face ((t (:underline t :foreground "cyan")))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (swbuff-current-buffer-face ((t (:bold t :foreground "red")))) + (template-message-face ((t (:bold t)))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (:background "black")))) + (term-blue ((t (:foreground "blue")))) + (term-blue-bold-face ((t (:bold t :background "snow2" :foreground "blue")))) + (term-blue-face ((t (:foreground "blue")))) + (term-blue-inv-face ((t (:background "blue")))) + (term-blue-ul-face ((t (:underline t :background "snow2" :foreground "blue")))) + (term-bluebg ((t (:background "blue")))) + (term-bold ((t (:bold t)))) + (term-cyan ((t (:foreground "cyan")))) + (term-cyan-bold-face ((t (:bold t :background "snow2" :foreground "cyan")))) + (term-cyan-face ((t (:foreground "cyan")))) + (term-cyan-inv-face ((t (:background "cyan")))) + (term-cyan-ul-face ((t (:underline t :background "snow2" :foreground "cyan")))) + (term-cyanbg ((t (:background "cyan")))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-bold-face ((t (:bold t :background "snow2" :foreground "darkslategray")))) + (term-default-face ((t (:background "snow2" :foreground "darkslategray")))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-default-inv-face ((t (:background "darkslategray" :foreground "snow2")))) + (term-default-ul-face ((t (:underline t :background "snow2" :foreground "darkslategray")))) + (term-green ((t (:foreground "green")))) + (term-green-bold-face ((t (:bold t :background "snow2" :foreground "green")))) + (term-green-face ((t (:foreground "green")))) + (term-green-inv-face ((t (:background "green")))) + (term-green-ul-face ((t (:underline t :background "snow2" :foreground "green")))) + (term-greenbg ((t (:background "green")))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (:foreground "magenta")))) + (term-magenta-bold-face ((t (:bold t :background "snow2" :foreground "magenta")))) + (term-magenta-face ((t (:foreground "magenta")))) + (term-magenta-inv-face ((t (:background "magenta")))) + (term-magenta-ul-face ((t (:underline t :background "snow2" :foreground "magenta")))) + (term-magentabg ((t (:background "magenta")))) + (term-red ((t (:foreground "red")))) + (term-red-bold-face ((t (:bold t :background "snow2" :foreground "red")))) + (term-red-face ((t (:foreground "red")))) + (term-red-inv-face ((t (:background "red")))) + (term-red-ul-face ((t (:underline t :background "snow2" :foreground "red")))) + (term-redbg ((t (:background "red")))) + (term-underline ((t (:underline t)))) + (term-white ((t (:foreground "white")))) + (term-white-bold-face ((t (:bold t :background "snow2" :foreground "white")))) + (term-white-face ((t (:foreground "white")))) + (term-white-inv-face ((t (:background "snow2")))) + (term-white-ul-face ((t (:underline t :background "snow2" :foreground "white")))) + (term-whitebg ((t (:background "white")))) + (term-yellow ((t (:foreground "yellow")))) + (term-yellow-bold-face ((t (:bold t :background "snow2" :foreground "yellow")))) + (term-yellow-face ((t (:foreground "yellow")))) + (term-yellow-inv-face ((t (:background "yellow")))) + (term-yellow-ul-face ((t (:underline t :background "snow2" :foreground "yellow")))) + (term-yellowbg ((t (:background "yellow")))) + (text-cursor ((t (:bold t :background "Red3" :foreground "gray80")))) + (toolbar ((t (:bold t :background "Gray80")))) + (underline ((t (:underline t :bold t)))) + (vc-annotate-face-0046FF ((t (nil)))) + (vcursor ((t (:underline t :background "cyan" :foreground "blue")))) + (vertical-divider ((t (:bold t :background "Gray80")))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-generic-/constant-face ((t (nil)))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red")))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange")))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-font-lock-type-face ((t (nil)))) + (vhdl-font-lock-variable-face ((t (nil)))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:underline t :foreground "Blue")))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:underline t :foreground "DarkGoldenrod")))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:underline t :foreground "ForestGreen")))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:underline t :foreground "Brown")))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:underline t :foreground "Grey50")))) + (vhdl-speedbar-subprogram-face ((t (nil)))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (vm-xface ((t (:background "white" :foreground "black")))) + (vmpc-pre-sig-face ((t (:foreground "forestgreen")))) + (vmpc-sig-face ((t (:foreground "steelblue")))) + (vvb-face ((t (nil)))) + (w3m-anchor-face ((t (:bold t :foreground "DodgerBlue1")))) + (w3m-arrived-anchor-face ((t (:bold t :foreground "DodgerBlue3")))) + (w3m-header-line-location-content-face ((t (:background "dark olive green" :foreground "wheat")))) + (w3m-header-line-location-title-face ((t (:background "dark olive green" :foreground "beige")))) + (white ((t (:foreground "white")))) + (widget ((t (nil)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:bold t :foreground "red")))) + (widget-documentation-face ((t (:bold t :foreground "dark green")))) + (widget-field-face ((t (:bold t :background "gray85")))) + (widget-inactive-face ((t (:bold t :foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (woman-bold-face ((t (:bold t)))) + (woman-italic-face ((t (:foreground "beige")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))) + (x-face ((t (:bold t :background "white" :foreground "black")))) + (x-symbol-adobe-fontspecific-face ((t (nil)))) + (x-symbol-face ((t (nil)))) + (x-symbol-heading-face ((t (:bold t)))) + (x-symbol-info-face ((t (nil)))) + (x-symbol-invisible-face ((t (nil)))) + (x-symbol-revealed-face ((t (nil)))) + (xrdb-option-name-face ((t (:foreground "red")))) + (xref-keyword-face ((t (:foreground "blue")))) + (xref-list-default-face ((t (nil)))) + (xref-list-pilot-face ((t (:foreground "navy")))) + (xref-list-symbol-face ((t (:foreground "navy")))) + (yellow ((t (:bold t :foreground "yellow")))) + (zmacs-region ((t (:bold t :background "gray65"))))))) + +(defun color-theme-mistyday () + "Color theme by K.C. Hari Kumar, created 2001-06-13. +Black on mistyrose. Includes CUA, calendar, diary, font-latex and +font-lock. Uses backgrounds on some font-lock faces." + (interactive) + (color-theme-install + '(color-theme-mistyday + ((background-color . "mistyrose") + (background-mode . light) + (border-color . "black") + (cursor-color . "deep pink") + (foreground-color . "Black") + (mouse-color . "black")) + ((goto-address-mail-face . italic) + (goto-address-mail-mouse-face . secondary-selection) + (goto-address-url-face . bold) + (goto-address-url-mouse-face . highlight) + (list-matching-lines-face . bold) + (paren-match-face . paren-face-match) + (paren-mismatch-face . paren-face-mismatch) + (paren-no-match-face . paren-face-no-match)) + (default ((t (nil)))) + (CUA-global-mark-face ((t (:background "cyan" :foreground "black")))) + (CUA-rectangle-face ((t (:background "maroon" :foreground "white")))) + (CUA-rectangle-noselect-face ((t (:background "dimgray" :foreground "white")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (calendar-today-face ((t (:underline t :background "Spring Green" :foreground "Brown")))) + (custom-button-face ((t (:background "dark slate grey" :foreground "azure")))) + (custom-documentation-face ((t (:background "white" :foreground "blue")))) + (diary-face ((t (:background "navy" :foreground "yellow")))) + (font-latex-bold-face ((t (:bold t :foreground "DarkOliveGreen")))) + (font-latex-italic-face ((t (:italic t :foreground "DarkOliveGreen")))) + (font-latex-math-face ((t (:foreground "navy")))) + (font-latex-sedate-face ((t (:foreground "DimGray")))) + (font-latex-string-face ((t (nil)))) + (font-latex-warning-face ((t (nil)))) + (font-lock-builtin-face ((t (:background "DarkTurquoise" :foreground "Navy")))) + (font-lock-comment-face ((t (:italic t :foreground "royal blue")))) + (font-lock-constant-face ((t (:background "pale green" :foreground "dark slate blue")))) + (font-lock-doc-string-face ((t (:background "medium aquamarine" :foreground "deep pink")))) + (font-lock-function-name-face ((t (:background "SpringGreen" :foreground "MidnightBlue")))) + (font-lock-keyword-face ((t (:foreground "dark magenta")))) + (font-lock-preprocessor-face ((t (:background "pale green" :foreground "dark slate blue")))) + (font-lock-reference-face ((t (:background "DarkTurquoise" :foreground "Navy")))) + (font-lock-string-face ((t (:background "medium aquamarine" :foreground "deep pink")))) + (font-lock-type-face ((t (:background "steel blue" :foreground "khaki")))) + (font-lock-variable-name-face ((t (:background "thistle" :foreground "orange red")))) + (font-lock-warning-face ((t (:background "LemonChiffon" :foreground "Red")))) + (highlight ((t (:background "dark slate grey" :foreground "light cyan")))) + (holiday-face ((t (:background "orangered" :foreground "lightyellow")))) + (ido-first-match-face ((t (:bold t)))) + (ido-only-match-face ((t (:foreground "ForestGreen")))) + (ido-subdir-face ((t (:foreground "red")))) + (italic ((t (:italic t)))) + (isearch ((t (:background "sienna" :foreground "light cyan")))) + (modeline ((t (:background "Royalblue4" :foreground "lawn green")))) + (modeline-buffer-id ((t (:background "Royalblue4" :foreground "lawn green")))) + (modeline-mousable ((t (:background "Royalblue4" :foreground "lawn green")))) + (modeline-mousable-minor-mode ((t (:background "Royalblue4" :foreground "lawn green")))) + (paren-face-match ((t (:background "turquoise")))) + (paren-face-mismatch ((t (:background "purple" :foreground "white")))) + (paren-face-no-match ((t (:background "yellow" :foreground "black")))) + (primary-selection ((t (:background "sienna" :foreground "light cyan")))) + (region ((t (:background "sienna" :foreground "light cyan")))) + (secondary-selection ((t (:background "forest green" :foreground "white smoke")))) + (underline ((t (:underline t)))) + (zmacs-region ((t (:background "sienna" :foreground "light cyan"))))))) + +(defun color-theme-marine () + "Color theme by Girish Bharadwaj, created 2001-06-22. +Matches the MS Windows Marine color theme. +Includes custom, font-lock, paren, widget." + (interactive) + (color-theme-install + '(color-theme-marine + ((background-color . "#9dcec9") + (background-mode . light) + (border-color . "black") + (cursor-color . "yellow") + (foreground-color . "darkslategray") + (mouse-color . "sienna1")) + ((buffers-tab-face . buffers-tab) + (gnus-mouse-face . highlight) + (smiley-mouse-face . highlight)) + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (nil)))) + (border-glyph ((t (nil)))) + (buffers-tab ((t (:background "#9dcec9" :foreground "darkslategray")))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "gray85")))) + (custom-comment-tag-face ((t (:foreground "blue4")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "deeppink")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "darkgreen")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (font-lock-builtin-face ((t (:foreground "SteelBlue")))) + (font-lock-comment-face ((t (:foreground "cadetblue")))) + (font-lock-constant-face ((t (:foreground "OrangeRed")))) + (font-lock-doc-string-face ((t (:foreground "Salmon")))) + (font-lock-function-name-face ((t (:bold t :foreground "NavyBlue")))) + (font-lock-keyword-face ((t (:bold t :foreground "purple")))) + (font-lock-preprocessor-face ((t (:foreground "SteelBlue")))) + (font-lock-reference-face ((t (:foreground "SteelBlue")))) + (font-lock-string-face ((t (:foreground "royalblue")))) + (font-lock-type-face ((t (:foreground "darkmagenta")))) + (font-lock-variable-name-face ((t (:foreground "violetred")))) + (font-lock-warning-face ((t (:bold t :foreground "red")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:background "#489088" :foreground "black")))) + (highlight ((t (:background "darkolivegreen" :foreground "white")))) + (isearch ((t (:background "blue")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (nil)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68" :foreground "darkslategray")))) + (modeline ((t (:background "black" :foreground "white")))) + (modeline-buffer-id ((t (:background "black" :foreground "white")))) + (modeline-mousable ((t (:background "black" :foreground "white")))) + (modeline-mousable-minor-mode ((t (:background "black" :foreground "white")))) + (paren-blink-off ((t (:foreground "black")))) + (paren-match ((t (:background "darkolivegreen" :foreground "white")))) + (paren-mismatch ((t (:background "#9dcec9" :foreground "darkslategray")))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "blue")))) + (red ((t (:foreground "red")))) + (region ((t (:background "blue")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "darkslateblue" :foreground "white")))) + (template-message-face ((t (:bold t)))) + (text-cursor ((t (:background "yellow" :foreground "#9dcec9")))) + (toolbar ((t (nil)))) + (underline ((t (:underline t)))) + (vertical-divider ((t (nil)))) + (widget ((t (nil)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "forestgreen")))) + (widget-field-face ((t (:background "gray")))) + (widget-inactive-face ((t (:foreground "dimgray")))) + (widget-single-line-field-face ((t (:background "dim gray" :foreground "white")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "blue"))))))) + +(defun color-theme-blue-erc () + "Color theme for erc faces only. +This is intended for other color themes to use (eg. `color-theme-gnome2')." + (color-theme-install + '(color-theme-blue-erc + nil + (erc-action-face ((t (nil)))) + (erc-bold-face ((t (:bold t)))) + (erc-current-nick-face ((t (:bold t :foreground "yellow")))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "pale green")))) + (erc-error-face ((t (:bold t :foreground "IndianRed")))) + (erc-highlight-face ((t (:bold t :foreground "pale green")))) + (erc-input-face ((t (:foreground "light blue")))) + (erc-inverse-face ((t (:background "steel blue")))) + (erc-keyword-face ((t (:foreground "orange" :bold t)))) + (erc-notice-face ((t (:foreground "light salmon")))) + (erc-notice-face ((t (:foreground "MediumAquamarine")))) + (erc-pal-face ((t (:foreground "pale green")))) + (erc-prompt-face ((t (:foreground "light blue" :bold t)))) + (fg:erc-color-face0 ((t (:foreground "white")))) + (fg:erc-color-face1 ((t (:foreground "beige")))) + (fg:erc-color-face2 ((t (:foreground "lemon chiffon")))) + (fg:erc-color-face3 ((t (:foreground "light cyan")))) + (fg:erc-color-face4 ((t (:foreground "powder blue")))) + (fg:erc-color-face5 ((t (:foreground "sky blue")))) + (fg:erc-color-face6 ((t (:foreground "dark sea green")))) + (fg:erc-color-face7 ((t (:foreground "pale green")))) + (fg:erc-color-face8 ((t (:foreground "medium spring green")))) + (fg:erc-color-face9 ((t (:foreground "khaki")))) + (fg:erc-color-face10 ((t (:foreground "pale goldenrod")))) + (fg:erc-color-face11 ((t (:foreground "light goldenrod yellow")))) + (fg:erc-color-face12 ((t (:foreground "light yellow")))) + (fg:erc-color-face13 ((t (:foreground "yellow")))) + (fg:erc-color-face14 ((t (:foreground "light goldenrod")))) + (fg:erc-color-face15 ((t (:foreground "lime green")))) + (bg:erc-color-face0 ((t (nil)))) + (bg:erc-color-face1 ((t (nil)))) + (bg:erc-color-face2 ((t (nil)))) + (bg:erc-color-face3 ((t (nil)))) + (bg:erc-color-face4 ((t (nil)))) + (bg:erc-color-face5 ((t (nil)))) + (bg:erc-color-face6 ((t (nil)))) + (bg:erc-color-face7 ((t (nil)))) + (bg:erc-color-face8 ((t (nil)))) + (bg:erc-color-face9 ((t (nil)))) + (bg:erc-color-face10 ((t (nil)))) + (bg:erc-color-face11 ((t (nil)))) + (bg:erc-color-face12 ((t (nil)))) + (bg:erc-color-face13 ((t (nil)))) + (bg:erc-color-face14 ((t (nil)))) + (bg:erc-color-face15 ((t (nil))))))) + +(defun color-theme-dark-erc () + "Color theme for erc faces only. +This is intended for other color themes to use (eg. `color-theme-late-night')." + (interactive) + (color-theme-install + '(color-theme-dark-erc + nil + (erc-action-face ((t (nil)))) + (erc-bold-face ((t (:bold t)))) + (erc-current-nick-face ((t (:bold t)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (nil)))) + (erc-error-face ((t (:bold t :foreground "IndianRed")))) + (erc-highlight-face ((t (:bold t :foreground "pale green")))) + (erc-input-face ((t (:foreground "#555")))) + (erc-inverse-face ((t (:background "steel blue")))) + (erc-keyword-face ((t (:foreground "#999" :bold t)))) + (erc-nick-msg-face ((t (:foreground "#888")))) + (erc-notice-face ((t (:foreground "#444")))) + (erc-pal-face ((t (:foreground "#888")))) + (erc-prompt-face ((t (:foreground "#777" :bold t)))) + (erc-timestamp-face ((t (:foreground "#777" :bold t)))) + (fg:erc-color-face0 ((t (:foreground "white")))) + (fg:erc-color-face1 ((t (:foreground "beige")))) + (fg:erc-color-face2 ((t (:foreground "lemon chiffon")))) + (fg:erc-color-face3 ((t (:foreground "light cyan")))) + (fg:erc-color-face4 ((t (:foreground "powder blue")))) + (fg:erc-color-face5 ((t (:foreground "sky blue")))) + (fg:erc-color-face6 ((t (:foreground "dark sea green")))) + (fg:erc-color-face7 ((t (:foreground "pale green")))) + (fg:erc-color-face8 ((t (:foreground "medium spring green")))) + (fg:erc-color-face9 ((t (:foreground "khaki")))) + (fg:erc-color-face10 ((t (:foreground "pale goldenrod")))) + (fg:erc-color-face11 ((t (:foreground "light goldenrod yellow")))) + (fg:erc-color-face12 ((t (:foreground "light yellow")))) + (fg:erc-color-face13 ((t (:foreground "yellow")))) + (fg:erc-color-face14 ((t (:foreground "light goldenrod")))) + (fg:erc-color-face15 ((t (:foreground "lime green")))) + (bg:erc-color-face0 ((t (nil)))) + (bg:erc-color-face1 ((t (nil)))) + (bg:erc-color-face2 ((t (nil)))) + (bg:erc-color-face3 ((t (nil)))) + (bg:erc-color-face4 ((t (nil)))) + (bg:erc-color-face5 ((t (nil)))) + (bg:erc-color-face6 ((t (nil)))) + (bg:erc-color-face7 ((t (nil)))) + (bg:erc-color-face8 ((t (nil)))) + (bg:erc-color-face9 ((t (nil)))) + (bg:erc-color-face10 ((t (nil)))) + (bg:erc-color-face11 ((t (nil)))) + (bg:erc-color-face12 ((t (nil)))) + (bg:erc-color-face13 ((t (nil)))) + (bg:erc-color-face14 ((t (nil)))) + (bg:erc-color-face15 ((t (nil))))))) + +(defun color-theme-subtle-blue () + "Color theme by Chris McMahan, created 2001-09-06. +Light blue background. Includes bbdb, comint, cperl, custom, cvs, +diary, dired, display-time, ecb, ediff, erc, eshell, font-lock, +gnus, html-helper, info, isearch, jde, message, paren, semantic, +sgml, speedbar, term, vhdl, viper, vm, widget, woman, xref, xxml." + (interactive) + (color-theme-install + '(color-theme-subtle-blue + ((background-color . "#65889C") + (background-mode . dark) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "black") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (cursor-color . "white") + (foreground-color . "#eedfcc") + (mouse-color . "Grey") + (top-toolbar-shadow-color . "#fffffbeeffff") + (viper-saved-cursor-color-in-replace-mode . "Red3")) + ((blank-space-face . blank-space-face) + (blank-tab-face . blank-tab-face) + (ecb-source-in-directories-buffer-face . ecb-sources-face) + (gnus-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight) + (vm-highlight-url-face . my-url-face) + (vm-highlighted-header-face . my-url-face) + (vm-mime-button-face . gui-button-face) + (vm-summary-highlight-face . my-summary-highlight-face)) + (default ((t (nil)))) + (bbdb-company ((t (:italic t)))) + (bbdb-field-name ((t (:bold t :foreground "MediumAquamarine")))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (:underline t)))) + (blank-space-face ((t (:background "gray80")))) + (blank-tab-face ((t (:background "LightBlue" :foreground "DarkSlateGray")))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t :foreground "MediumAquamarine")))) + (bold-italic ((t (:italic t :bold t :foreground "SkyBlue")))) + (border ((t (:background "black")))) + (border-glyph ((t (nil)))) + (calendar-today-face ((t (:underline t)))) + (comint-highlight-input ((t (:bold t)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (comint-input-face ((t (:foreground "deepskyblue")))) + (cperl-array-face ((t (:bold t :foreground "Yellow")))) + (cperl-hash-face ((t (:italic t :bold t :foreground "White")))) + (cperl-nonoverridable-face ((t (:foreground "SkyBlue")))) + (cursor ((t (:background "white")))) + (custom-button-face ((t (:underline t :bold t :foreground "MediumAquaMarine")))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black")))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "dim gray")))) + (custom-comment-tag-face ((t (:foreground "gray80")))) + (custom-documentation-face ((t (:foreground "Grey")))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:bold t :foreground "MediumAquamarine")))) + (custom-group-tag-face-1 ((t (:foreground "MediumAquaMarine")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "yellow")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:bold t :foreground "Aquamarine")))) + (cvs-filename-face ((t (:foreground "blue4")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:bold t :foreground "blue4")))) + (cvs-marked-face ((t (:bold t :foreground "green3")))) + (cvs-msg-face ((t (:italic t)))) + (cvs-need-action-face ((t (:foreground "orange")))) + (cvs-unknown-face ((t (:foreground "red")))) + (diary-face ((t (:bold t :foreground "cyan")))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t :foreground "sky blue")))) + (dired-face-executable ((t (:foreground "MediumAquaMarine")))) + (dired-face-flagged ((t (:foreground "Cyan")))) + (dired-face-marked ((t (:foreground "cyan")))) + (dired-face-permissions ((t (:foreground "aquamarine")))) + (dired-face-setuid ((t (:foreground "LightSalmon")))) + (dired-face-socket ((t (:foreground "LightBlue")))) + (dired-face-symlink ((t (:foreground "gray95")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (ecb-sources-face ((t (:foreground "LightBlue1")))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "indianred" :foreground "white")))) + (ediff-even-diff-face-A ((t (:background "light gray" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Gray" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Gray" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light gray" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Gray" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light gray" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light gray" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Gray" :foreground "White")))) + (erc-action-face ((t (:bold t)))) + (erc-bold-face ((t (:bold t)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "LightSalmon")))) + (erc-error-face ((t (:bold t :foreground "yellow")))) + (erc-input-face ((t (:foreground "Beige")))) + (erc-inverse-face ((t (:background "wheat" :foreground "darkslategrey")))) + (erc-notice-face ((t (:foreground "MediumAquamarine")))) + (erc-pal-face ((t (:foreground "PaleGreen")))) + (erc-prompt-face ((t (:foreground "MediumAquamarine")))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :foreground "wheat")))) + (eshell-ls-backup-face ((t (:foreground "Grey")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "wheat")))) + (eshell-ls-directory-face ((t (:bold t :foreground "Yellow")))) + (eshell-ls-executable-face ((t (:bold t :foreground "wheat")))) + (eshell-ls-missing-face ((t (:bold t :foreground "wheat")))) + (eshell-ls-picture-face ((t (:foreground "wheat")))) + (eshell-ls-product-face ((t (:foreground "wheat")))) + (eshell-ls-readonly-face ((t (:foreground "wheat")))) + (eshell-ls-special-face ((t (:bold t :foreground "wheat")))) + (eshell-ls-symlink-face ((t (:bold t :foreground "White")))) + (eshell-ls-text-face ((t (:foreground "wheat")))) + (eshell-ls-todo-face ((t (:foreground "wheat")))) + (eshell-ls-unreadable-face ((t (:foreground "wheat3")))) + (eshell-prompt-face ((t (:bold t :foreground "PaleGreen")))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-test-ok-face ((t (:bold t :foreground "Green")))) + (excerpt ((t (:italic t)))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "NavyBlue")))) + (flyspell-duplicate-face ((t (:underline t :bold t :foreground "Gold3")))) + (flyspell-incorrect-face ((t (:underline t :bold t :foreground "OrangeRed")))) + (font-latex-italic-face ((t (nil)))) + (font-latex-math-face ((t (nil)))) + (font-latex-sedate-face ((t (:foreground "Gray85")))) + (font-latex-string-face ((t (:foreground "orange")))) + (font-latex-warning-face ((t (:foreground "gold")))) + (font-lock-builtin-face ((t (:foreground "PaleGreen")))) + (font-lock-comment-face ((t (:italic t :foreground "Wheat3")))) + (font-lock-constant-face ((t (:foreground "LightBlue")))) + (font-lock-doc-face ((t (:bold t :foreground "DarkSeaGreen")))) + (font-lock-doc-string-face ((t (:bold t :foreground "DarkSeaGreen")))) + (font-lock-exit-face ((t (:foreground "green")))) + (font-lock-function-name-face ((t (:italic t :bold t :foreground "cyan")))) + (font-lock-keyword-face ((t (:bold t :foreground "LightBlue")))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "PaleGreen")))) + (font-lock-string-face ((t (:italic t :foreground "MediumAquamarine")))) + (font-lock-type-face ((t (:bold t :foreground "LightBlue")))) + (font-lock-variable-name-face ((t (:italic t :bold t :foreground "LightBlue")))) + (font-lock-warning-face ((t (:bold t :foreground "LightSalmon")))) + (fringe ((t (:background "darkslategrey")))) + (gnus-cite-attribution-face ((t (:italic t :bold t)))) + (gnus-cite-face-1 ((t (:foreground "LightBlue")))) + (gnus-cite-face-10 ((t (:foreground "LightBlue")))) + (gnus-cite-face-11 ((t (:foreground "LightBlue")))) + (gnus-cite-face-2 ((t (:foreground "LightBlue")))) + (gnus-cite-face-3 ((t (:foreground "LightBlue")))) + (gnus-cite-face-4 ((t (:foreground "LightBlue")))) + (gnus-cite-face-5 ((t (:foreground "LightBlue")))) + (gnus-cite-face-6 ((t (:foreground "LightBlue")))) + (gnus-cite-face-7 ((t (:foreground "LightBlue")))) + (gnus-cite-face-8 ((t (:foreground "LightBlue")))) + (gnus-cite-face-9 ((t (:foreground "LightBlue")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-filterhist-face-1 ((t (nil)))) + (gnus-group-mail-1-empty-face ((t (:foreground "gray80")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "light cyan")))) + (gnus-group-mail-2-empty-face ((t (:foreground "gray80")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "turquoise")))) + (gnus-group-mail-3-empty-face ((t (:foreground "gray80")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "LightBlue")))) + (gnus-group-mail-low-empty-face ((t (:foreground "gray80")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "LightBlue")))) + (gnus-group-news-1-empty-face ((t (:foreground "gray80")))) + (gnus-group-news-1-face ((t (:bold t :foreground "green yellow")))) + (gnus-group-news-2-empty-face ((t (:foreground "gray80")))) + (gnus-group-news-2-face ((t (:bold t :foreground "Aquamarine")))) + (gnus-group-news-3-empty-face ((t (:foreground "gray80")))) + (gnus-group-news-3-face ((t (:bold t :foreground "LightBlue")))) + (gnus-group-news-4-empty-face ((t (:foreground "gray80")))) + (gnus-group-news-4-face ((t (:bold t :foreground "Wheat")))) + (gnus-group-news-5-empty-face ((t (:foreground "gray80")))) + (gnus-group-news-5-face ((t (:bold t :foreground "MediumAquamarine")))) + (gnus-group-news-6-empty-face ((t (:foreground "gray80")))) + (gnus-group-news-6-face ((t (:bold t :foreground "MediumAquamarine")))) + (gnus-group-news-low-empty-face ((t (:foreground "gray80")))) + (gnus-group-news-low-face ((t (:bold t :foreground "yellow green")))) + (gnus-header-content-face ((t (:italic t :foreground "LightSkyBlue3")))) + (gnus-header-from-face ((t (:bold t :foreground "light cyan")))) + (gnus-header-name-face ((t (:bold t :foreground "LightBlue")))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "LightSkyBlue3")))) + (gnus-header-subject-face ((t (:bold t :foreground "light cyan")))) + (gnus-picons-face ((t (:background "white" :foreground "black")))) + (gnus-picons-xbm-face ((t (:background "white" :foreground "black")))) + (gnus-signature-face ((t (:italic t :foreground "LightBlue")))) + (gnus-splash ((t (:foreground "Brown")))) + (gnus-splash-face ((t (:foreground "LightBlue")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "gray80")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "LightBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "gray80")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "burlywood")))) + (gnus-summary-high-unread-face ((t (:italic t :bold t :foreground "wheat")))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "LightBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "light sea green")))) + (gnus-summary-low-ticked-face ((t (:italic t :bold t :foreground "LightBlue")))) + (gnus-summary-low-unread-face ((t (:italic t :foreground "light sea green")))) + (gnus-summary-normal-ancient-face ((t (:foreground "gray80")))) + (gnus-summary-normal-read-face ((t (:foreground "gray80")))) + (gnus-summary-normal-ticked-face ((t (:bold t :foreground "sandy brown")))) + (gnus-summary-normal-unread-face ((t (:bold t :foreground "wheat")))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-x-face ((t (:background "white" :foreground "black")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "cyan" :foreground "#65889C")))) + (gui-element ((t (:background "Gray")))) + (header-line ((t (:background "grey20" :foreground "grey90")))) + (highlight ((t (:background "PaleGreen" :foreground "DarkGreen")))) + (highlight-changes-delete-face ((t (:underline t :foreground "red")))) + (highlight-changes-face ((t (:foreground "red")))) + (highline-face ((t (:background "SeaGreen")))) + (holiday-face ((t (:background "DimGray")))) + (html-helper-bold-face ((t (:foreground "DarkRed")))) + (html-helper-italic-face ((t (:foreground "DarkBlue")))) + (html-helper-underline-face ((t (:underline t :foreground "Black")))) + (html-tag-face ((t (:foreground "Blue")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:underline t :italic t :bold t :foreground "light blue")))) + (info-xref ((t (:bold t :foreground "light blue")))) + (isearch ((t (:background "Aquamarine" :foreground "SteelBlue")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (:italic t)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-bug-breakpoint-marker ((t (:background "yellow" :foreground "red")))) + (jde-java-font-lock-api-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-bold-face ((t (:bold t)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-italic-face ((t (:italic t)))) + (jde-java-font-lock-link-face ((t (:underline t :foreground "LightBlue")))) + (jde-java-font-lock-modifier-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-number-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-package-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (lazy-highlight-face ((t (:bold t :foreground "dark magenta")))) + (left-margin ((t (nil)))) + (linemenu-face ((t (:background "gray30")))) + (list-mode-item-selected ((t (nil)))) + (makefile-space-face ((t (:background "hotpink")))) + (menu ((t (:background "wheat" :foreground "gray30")))) + (message-cited-text-face ((t (:foreground "White")))) + (message-header-cc-face ((t (:bold t :foreground "light cyan")))) + (message-header-name-face ((t (:foreground "LightBlue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "LightSkyBlue3")))) + (message-header-other-face ((t (:foreground "LightSkyBlue3")))) + (message-header-subject-face ((t (:bold t :foreground "light cyan")))) + (message-header-to-face ((t (:bold t :foreground "light cyan")))) + (message-header-xheader-face ((t (:foreground "LightBlue")))) + (message-mml-face ((t (:bold t :foreground "LightBlue")))) + (message-separator-face ((t (:foreground "LightBlue")))) + (mmm-default-submode-face ((t (:background "#c0c0c5")))) + (modeline ((t (:background "#4f657d" :foreground "gray80")))) + (modeline-buffer-id ((t (:background "#4f657d" :foreground "gray80")))) + (modeline-mousable ((t (:background "#4f657d" :foreground "gray80")))) + (modeline-mousable-minor-mode ((t (:background "#4f657d" :foreground "gray80")))) + (mouse ((t (:background "Grey")))) + (my-summary-highlight-face ((t (:foreground "White")))) + (my-url-face ((t (:foreground "PaleTurquoise")))) + (nil ((t (nil)))) + (paren-blink-off ((t (:foreground "gray")))) + (paren-face-match ((t (:background "turquoise")))) + (paren-face-mismatch ((t (:background "purple" :foreground "white")))) + (paren-face-no-match ((t (:background "yellow" :foreground "black")))) + (paren-match ((t (:background "darkseagreen2")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "black")))) + (paren-mismatch-face ((t (:bold t)))) + (paren-no-match-face ((t (:bold t)))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "CadetBlue" :foreground "gray80")))) + (right-margin ((t (nil)))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "LightBlue" :foreground "#4f657d")))) + (semantic-dirty-token-face ((t (:background "gray10")))) + (semantic-intangible-face ((t (:foreground "gray25")))) + (semantic-read-only-face ((t (:background "gray25")))) + (senator-intangible-face ((t (:foreground "gray75")))) + (senator-momentary-highlight-face ((t (:background "gray80")))) + (senator-read-only-face ((t (:background "#664444")))) + (sgml-comment-face ((t (:foreground "dark turquoise")))) + (sgml-doctype-face ((t (:foreground "red")))) + (sgml-end-tag-face ((t (:foreground "blue")))) + (sgml-entity-face ((t (:foreground "magenta")))) + (sgml-ignored-face ((t (:background "gray60" :foreground "gray40")))) + (sgml-ms-end-face ((t (:foreground "green")))) + (sgml-ms-start-face ((t (:foreground "yellow")))) + (sgml-pi-face ((t (:foreground "lime green")))) + (sgml-sgml-face ((t (:foreground "brown")))) + (sgml-short-ref-face ((t (:foreground "deep sky blue")))) + (sgml-start-tag-face ((t (:foreground "dark green")))) + (shell-option-face ((t (:foreground "blue")))) + (shell-output-2-face ((t (:foreground "darkseagreen")))) + (shell-output-3-face ((t (:foreground "slategray")))) + (shell-output-face ((t (:foreground "palegreen")))) + (shell-prompt-face ((t (:foreground "red")))) + (show-paren-match-face ((t (:background "Aquamarine" :foreground "steel blue")))) + (show-paren-mismatch-face ((t (:bold t :background "IndianRed" :foreground "White")))) + (speedbar-button-face ((t (:bold t :foreground "LightBlue")))) + (speedbar-directory-face ((t (:bold t :foreground "yellow")))) + (speedbar-file-face ((t (:bold t :foreground "wheat")))) + (speedbar-highlight-face ((t (:background "sea green")))) + (speedbar-selected-face ((t (:underline t)))) + (speedbar-tag-face ((t (:foreground "LightBlue")))) + (swbuff-current-buffer-face ((t (:bold t :foreground "red")))) + (template-message-face ((t (:bold t)))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (:background "black")))) + (term-blue ((t (:foreground "blue")))) + (term-bluebg ((t (:background "blue")))) + (term-bold ((t (:bold t)))) + (term-cyan ((t (:foreground "cyan")))) + (term-cyanbg ((t (:background "cyan")))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-green ((t (:foreground "green")))) + (term-greenbg ((t (:background "green")))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (:foreground "magenta")))) + (term-magentabg ((t (:background "magenta")))) + (term-red ((t (:foreground "red")))) + (term-redbg ((t (:background "red")))) + (term-underline ((t (:underline t)))) + (term-white ((t (:foreground "white")))) + (term-whitebg ((t (:background "white")))) + (term-yellow ((t (:foreground "yellow")))) + (term-yellowbg ((t (:background "yellow")))) + (text-cursor ((t (:background "Red3" :foreground "white")))) + (tool-bar ((t (:background "grey75" :foreground "black")))) + (toolbar ((t (:background "Gray")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (nil)))) + (vc-annotate-face-0046FF ((t (:background "black" :foreground "wheat")))) + (vcursor ((t (:underline t :background "cyan" :foreground "blue")))) + (vertical-divider ((t (:background "Gray")))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red")))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange")))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:underline t :foreground "Blue")))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:underline t :foreground "DarkGoldenrod")))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:underline t :foreground "ForestGreen")))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:underline t :foreground "Brown")))) + (vhdl-speedbar-package-face ((t (:foreground "Gray50")))) + (vhdl-speedbar-package-selected-face ((t (:underline t :foreground "Gray50")))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "gray" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (vm-header-content-face ((t (:italic t :foreground "gray80")))) + (vm-header-from-face ((t (:italic t :background "#65889C" :foreground "cyan")))) + (vm-header-name-face ((t (:foreground "cyan")))) + (vm-header-subject-face ((t (:foreground "cyan")))) + (vm-header-to-face ((t (:italic t :foreground "cyan")))) + (vm-message-cited-face ((t (:foreground "Gray80")))) + (vm-summary-face-1 ((t (:foreground "MediumAquamarine")))) + (vm-summary-face-2 ((t (:foreground "MediumAquamarine")))) + (vm-summary-face-3 ((t (:foreground "MediumAquamarine")))) + (vm-summary-face-4 ((t (:foreground "MediumAquamarine")))) + (vm-summary-highlight-face ((t (:foreground "White")))) + (vmpc-pre-sig-face ((t (:foreground "Aquamarine")))) + (vmpc-sig-face ((t (:foreground "LightBlue")))) + (vvb-face ((t (:background "pink" :foreground "black")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "cyan")))) + (widget-documentation-face ((t (:foreground "LightBlue")))) + (widget-field-face ((t (:foreground "LightBlue")))) + (widget-inactive-face ((t (:foreground "Wheat3")))) + (widget-single-line-field-face ((t (:foreground "LightBlue")))) + (woman-bold-face ((t (:bold t)))) + (woman-italic-face ((t (:foreground "beige")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))) + (xref-keyword-face ((t (:foreground "Cyan")))) + (xref-list-pilot-face ((t (:foreground "navy")))) + (xref-list-symbol-face ((t (:foreground "navy")))) + (xxml-emph-1-face ((t (:background "lightyellow")))) + (xxml-emph-2-face ((t (:background "lightyellow")))) + (xxml-header-1-face ((t (:background "seashell1" :foreground "MediumAquamarine")))) + (xxml-header-2-face ((t (:background "seashell1" :foreground "SkyBlue")))) + (xxml-header-3-face ((t (:background "seashell1")))) + (xxml-header-4-face ((t (:background "seashell1")))) + (xxml-interaction-face ((t (:background "lightcyan")))) + (xxml-rug-face ((t (:background "cyan")))) + (xxml-sparkle-face ((t (:background "yellow")))) + (xxml-unbreakable-space-face ((t (:underline t :foreground "grey")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "#4f657d"))))))) + +(defun color-theme-dark-blue () + "Color theme by Chris McMahan, created 2001-09-09. +Based on `color-theme-subtle-blue' with a slightly darker background." + (interactive) + (color-theme-subtle-blue) + (let ((color-theme-is-cumulative t)) + (color-theme-install + '(color-theme-dark-blue + ((background-color . "#537182") + (foreground-color . "AntiqueWhite2")) + nil + (default ((t (nil)))) + (blank-space-face ((t (:background "LightGray")))) + (blank-tab-face ((t (:background "Wheat" :foreground "DarkSlateGray")))) + (cursor ((t (:background "LightGray")))) + (dired-face-executable ((t (:foreground "green yellow")))) + (dired-face-flagged ((t (:foreground "tomato")))) + (dired-face-marked ((t (:foreground "light salmon")))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (fixed ((t (:bold t)))) + (font-lock-comment-face ((t (:italic t :foreground "Gray80")))) + (font-lock-doc-face ((t (:bold t)))) + (font-lock-function-name-face ((t (:italic t :bold t :foreground "Yellow")))) + (font-lock-string-face ((t (:italic t :foreground "DarkSeaGreen")))) + (font-lock-type-face ((t (:bold t :foreground "YellowGreen")))) + (gui-button-face ((t (:background "DarkSalmon" :foreground "white")))) + (modeline ((t (:background "#c1ccd9" :foreground "#4f657d")))) + (modeline-buffer-id ((t (:background "#c1ccd9" :foreground "#4f657d")))) + (modeline-mousable ((t (:background "#c1ccd9" :foreground "#4f657d")))) + (modeline-mousable-minor-mode ((t (:background "#c1ccd9" :foreground "#4f657d")))) + (my-url-face ((t (:foreground "LightBlue")))) + (region ((t (:background "PaleTurquoise4" :foreground "gray80")))) + (secondary-selection ((t (:background "sea green" :foreground "yellow")))) + (vm-header-content-face ((t (:italic t :foreground "wheat")))) + (vm-header-from-face ((t (:italic t :foreground "wheat")))) + (widget-button-pressed-face ((t (:foreground "red")))) + (xref-keyword-face ((t (:foreground "blue")))) + (zmacs-region ((t (:background "SlateGray")))))))) + +(defun color-theme-jonadabian-slate () + "Another slate-and-wheat color theme by Jonadab the Unsightly One. +Updated 2001-10-12." + (interactive) + (color-theme-install + '(color-theme-jonadabian-slate + ((background-color . "#305050") + (background-mode . dark) + (border-color . "black") + (cursor-color . "medium turquoise") + (foreground-color . "#CCBB77") + (mouse-color . "black")) + ((list-matching-lines-face . bold) + (ued-mode-keyname-face . modeline) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (fringe ((t (:background "#007080")))) + (bold ((t (:bold t :foreground "#EEDDAA")))) + (gnus-emphasis-bold ((t (:bold t :foreground "#EEDDAA")))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t :foreground "#EEDDAA")))) + (bold-italic ((t (:italic t :bold t :foreground "#AA0000")))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :foreground "#AA0000")))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t :foreground "#AA0000")))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t :bold t :foreground "#AA0000")))) + (calendar-today-face ((t (:underline t :background "darkslategrey")))) + (cperl-array-face ((t (:background "#004060")))) + (cperl-hash-face ((t (:background "#004400")))) + (custom-button-face ((t (:background "dark blue" :foreground "rgbi:1.00/1.00/0.00")))) + (custom-documentation-face ((t (:foreground "#10D010")))) + (custom-face-tag-face ((t (:underline t :foreground "goldenrod")))) + (custom-group-tag-face ((t (:underline t :foreground "light blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "pink")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:foreground "#6666dd")))) + (custom-state-face ((t (:foreground "mediumaquamarine")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "light blue")))) + (diary-face ((t (:foreground "red")))) + (eshell-ls-archive-face ((t (:foreground "green")))) + (eshell-ls-backup-face ((t (:foreground "grey60")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-ls-directory-face ((t (:bold t :foreground "SkyBlue")))) + (eshell-ls-executable-face ((t (:foreground "white")))) + (eshell-ls-missing-face ((t (:foreground "red")))) + (eshell-ls-product-face ((t (:foreground "LightSalmon")))) + (eshell-ls-readonly-face ((t (:foreground "indian red")))) + (eshell-ls-special-face ((t (:foreground "yellow")))) + (eshell-ls-symlink-face ((t (:foreground "#6666dd")))) + (eshell-ls-unreadable-face ((t (:foreground "red")))) + (eshell-prompt-face ((t (:bold t :background "#305050" :foreground "#EEDD99")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:italic t :bold t :foreground "grey66")))) + (font-lock-constant-face ((t (:foreground "indian red")))) + (font-lock-function-name-face ((t (:foreground "#D0D000")))) + (font-lock-keyword-face ((t (:foreground "#00BBBB")))) + (font-lock-string-face ((t (:foreground "#10D010")))) + (font-lock-type-face ((t (:bold t :foreground "#ff7788")))) + (font-lock-variable-name-face ((t (:foreground "#eeddaa")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (header-line ((t (:box (:line-width 1 :style released-button))))) + (highlight ((t (:background "#226644")))) + (highlight-changes-delete-face ((t (:background "navy" :foreground "red")))) + (highlight-changes-face ((t (:background "navy")))) + (holiday-face ((t (:foreground "#ff7744")))) + (italic ((t (:italic t :foreground "#AA0000")))) + (gnus-emphasis-italic ((t (:italic t :foreground "#AA0000")))) + (modeline ((t (:background "#007080" :foreground "cyan")))) + (modeline-buffer-id ((t (:background "#007080" :foreground "cyan")))) + (modeline-mousable ((t (:background "#007080" :foreground "cyan")))) + (modeline-mousable-minor-mode ((t (:background "#007080" :foreground "cyan")))) + (region ((t (:background "#226644")))) + (secondary-selection ((t (:background "darkslategrey")))) + (sgml-comment-face ((t (:foreground "grey60")))) + (sgml-doctype-face ((t (:foreground "red")))) + (sgml-end-tag-face ((t (:foreground "#00D0D0")))) + (sgml-entity-face ((t (:foreground "indian red")))) + (sgml-ignored-face ((t (:background "gray60" :foreground "gray40")))) + (sgml-ms-end-face ((t (:foreground "green")))) + (sgml-ms-start-face ((t (:foreground "green")))) + (sgml-pi-face ((t (:foreground "lime green")))) + (sgml-sgml-face ((t (:foreground "brown")))) + (sgml-short-ref-face ((t (:foreground "deep sky blue")))) + (sgml-start-tag-face ((t (:foreground "#D0D000")))) + (show-paren-match-face ((t (:background "#400055" :foreground "cyan")))) + (show-paren-mismatch-face ((t (:background "red")))) + (special-string-face ((t (:foreground "light green")))) + (term-black ((t (:background "#000055" :foreground "black")))) + (term-blackbg ((t (:background "black" :foreground "#CCBB77")))) + (term-blue ((t (:background "#000055" :foreground "blue")))) + (term-bluebg ((t (:background "blue" :foreground "#CCBB77")))) + (term-bold ((t (:bold t :background "#000055" :foreground "#CCBB77")))) + (term-cyan ((t (:background "#000055" :foreground "cyan")))) + (term-cyanbg ((t (:background "darkcyan")))) + (term-default-bg ((t (:foreground "#CCBB77")))) + (term-default-bg-inv ((t (:foreground "#CCBB77")))) + (term-default-fg ((t (:background "#000055")))) + (term-default-fg-inv ((t (:background "#000055")))) + (term-green ((t (:background "#000055" :foreground "green")))) + (term-greenbg ((t (:background "darkgreen")))) + (term-invisible ((t (:foreground "#CCBB77")))) + (term-invisible-inv ((t (:foreground "#CCBB77")))) + (term-magenta ((t (:background "#000055" :foreground "magenta")))) + (term-magentabg ((t (:background "darkmagenta")))) + (term-red ((t (:background "#000055" :foreground "red")))) + (term-redbg ((t (:background "darkred")))) + (term-underline ((t (:underline t :background "#000055" :foreground "#CCBB77")))) + (term-white ((t (:background "#000055" :foreground "white")))) + (term-whitebg ((t (:background "grey50")))) + (term-yellow ((t (:background "#000055" :foreground "yellow")))) + (term-yellowbg ((t (:background "#997700")))) + (trailing-whitespace ((t (:background "#23415A")))) + (underline ((t (:underline t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "green")))) + (widget-field-face ((t (:background "grey35" :foreground "black")))) + (widget-inactive-face ((t (:foreground "gray")))) + (widget-single-line-field-face ((t (:background "dim gray"))))))) + +(defun color-theme-gray1 () + "Color theme by Paul Pulli, created 2001-10-19." + (interactive) + (color-theme-install + '(color-theme-gray1 + ((background-color . "darkgray") + (background-mode . light) + (background-toolbar-color . "#949494949494") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#595959595959") + (cursor-color . "Yellow") + (foreground-color . "black") + (top-toolbar-shadow-color . "#b2b2b2b2b2b2")) + nil + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (nil)))) + (cperl-here-face ((t (:background "gray68" :foreground "DeepPink")))) + (font-lock-builtin-face ((t (:bold t :foreground "red3")))) + (font-lock-comment-face ((t (:foreground "gray50")))) + (font-lock-constant-face ((t (:bold t :foreground "blue3")))) + (font-lock-doc-string-face ((t (:foreground "black")))) + (font-lock-function-name-face ((t (:bold t :foreground "DeepPink3")))) + (font-lock-keyword-face ((t (:bold t :foreground "red")))) + (font-lock-other-type-face ((t (:bold t :foreground "green4")))) + (font-lock-preprocessor-face ((t (:bold t :foreground "blue3")))) + (font-lock-reference-face ((t (:bold t :foreground "red3")))) + (font-lock-string-face ((t (:foreground "red")))) + (font-lock-type-face ((t (:bold t :foreground "white")))) + (font-lock-variable-name-face ((t (:bold t :foreground "blue3")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (green ((t (:foreground "green4")))) + (gui-button-face ((t (:background "black" :foreground "red")))) + (gui-element ((t (:background "gray58")))) + (highlight ((t (:background "magenta" :foreground "yellow")))) + (isearch ((t (:background "red" :foreground "yellow")))) + (italic ((t (:italic t)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray90" :foreground "purple")))) + (m4-face ((t (:background "gray90" :foreground "orange3")))) + (message-cited-text ((t (nil)))) + (message-header-contents ((t (nil)))) + (message-headers ((t (nil)))) + (message-highlighted-header-contents ((t (nil)))) + (modeline ((t (:background "#aa80aa" :foreground "White")))) + (modeline-buffer-id ((t (:background "#aa80aa" :foreground "linen")))) + (modeline-mousable ((t (:background "#aa80aa" :foreground "cyan")))) + (modeline-mousable-minor-mode ((t (:background "#aa80aa" :foreground "yellow")))) + (paren-blink-off ((t (:foreground "gray58")))) + (paren-blink-on ((t (:foreground "purple")))) + (paren-match ((t (:background "gray68" :foreground "white")))) + (paren-mismatch ((t (:background "DeepPink" :foreground "black")))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray")))) + (red ((t (:foreground "red")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (text-cursor ((t (:background "Yellow" :foreground "darkgray")))) + (toolbar ((t (:background "#aa80aa" :foreground "linen")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (nil)))) + (x-face ((t (:background "black" :foreground "lavenderblush")))) + (yellow ((t (:foreground "yellow3")))) + (zmacs-region ((t (:background "paleturquoise" :foreground "black"))))))) + +(defun color-theme-word-perfect () + "White on blue background, based on WordPerfect 5.1. +Color theme by Thomas Gehrlein, created 2001-10-21." + (interactive) + (color-theme-install + '(color-theme-word-perfect + ((background-color . "blue4") + (background-mode . dark) + (border-color . "black") + (cursor-color . "gold") + (foreground-color . "white") + (mouse-color . "black")) + ((ecb-source-in-directories-buffer-face . ecb-sources-face) + (gnus-mouse-face . highlight) + (goto-address-mail-face . italic) + (goto-address-mail-mouse-face . secondary-selection) + (goto-address-url-face . bold) + (goto-address-url-mouse-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bbdb-field-name ((t (:foreground "lime green")))) + (bbdb-field-value ((t (:foreground "white")))) + (bbdb-name ((t (:underline t :foreground "lime green")))) + (bold ((t (:bold t :foreground "white")))) + (bold-italic ((t (:italic t :bold t :foreground "yellow")))) + (calendar-today-face ((t (:underline t :foreground "deep sky blue")))) + (diary-face ((t (:foreground "gold")))) + (ecb-sources-face ((t (:foreground "LightBlue1")))) + (edb-inter-field-face ((t (:foreground "deep sky blue")))) + (edb-normal-summary-face ((t (:foreground "gold")))) + (emacs-wiki-bad-link-face ((t (:underline "coral" :bold t :foreground "coral")))) + (emacs-wiki-link-face ((t (:underline "cyan" :bold t :foreground "cyan")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:foreground "deep sky blue")))) + (font-lock-constant-face ((t (:foreground "lime green")))) + (font-lock-doc-face ((t (:foreground "gold")))) + (font-lock-doc-string-face ((t (:foreground "gold")))) + (font-lock-function-name-face ((t (:background "blue4" :foreground "IndianRed")))) + (font-lock-keyword-face ((t (:foreground "lime green")))) + (font-lock-preprocessor-face ((t (:foreground "lime green")))) + (font-lock-reference-face ((t (:foreground "LightSteelBlue")))) + (font-lock-string-face ((t (:foreground "gold")))) + (font-lock-type-face ((t (:foreground "lime green")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "firebrick")))) + (gnus-emphasis-bold ((t (:foreground "yellow2")))) + (gnus-emphasis-bold-italic ((t (:foreground "yellow2")))) + (gnus-emphasis-italic ((t (:foreground "yellow2")))) + (gnus-emphasis-underline ((t (:foreground "yellow2")))) + (gnus-emphasis-underline-bold ((t (:foreground "yellow2")))) + (gnus-emphasis-underline-bold-italic ((t (:foreground "yellow2")))) + (gnus-emphasis-underline-italic ((t (:foreground "yellow2")))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1")))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2")))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "aquamarine3")))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4")))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise")))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise")))) + (gnus-group-news-3-empty-face ((t (:foreground "deep sky blue")))) + (gnus-group-news-3-face ((t (:bold t :foreground "deep sky blue")))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise")))) + (gnus-header-content-face ((t (:foreground "gold")))) + (gnus-header-from-face ((t (:foreground "gold")))) + (gnus-header-name-face ((t (:foreground "deep sky blue")))) + (gnus-header-newsgroups-face ((t (:foreground "gold")))) + (gnus-header-subject-face ((t (:foreground "gold")))) + (gnus-signature-face ((t (:foreground "gold")))) + (gnus-splash-face ((t (:foreground "firebrick")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "deep sky blue")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "deep sky blue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "deep sky blue")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "deep sky blue")))) + (gnus-summary-high-unread-face ((t (:bold t :foreground "lime green")))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "deep sky blue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "deep sky blue")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "deep sky blue")))) + (gnus-summary-low-unread-face ((t (:italic t :foreground "lime green")))) + (gnus-summary-normal-ancient-face ((t (:foreground "deep sky blue")))) + (gnus-summary-normal-read-face ((t (:foreground "deep sky blue")))) + (gnus-summary-normal-ticked-face ((t (:foreground "deep sky blue")))) + (gnus-summary-normal-unread-face ((t (:foreground "lime green")))) + (gnus-summary-selected-face ((t (:underline t :foreground "gold")))) + (highlight ((t (:background "steel blue" :foreground "black")))) + (holiday-face ((t (:background "blue4" :foreground "IndianRed1")))) + (info-menu-5 ((t (:underline t :foreground "gold")))) + (info-node ((t (:italic t :bold t :foreground "gold")))) + (info-xref ((t (:bold t :foreground "gold")))) + (isearch ((t (:background "firebrick" :foreground "white")))) + (italic ((t (:italic t :foreground "yellow2")))) + (message-cited-text-face ((t (:foreground "gold")))) + (message-header-cc-face ((t (:bold t :foreground "green4")))) + (message-header-name-face ((t (:foreground "deep sky blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "gold")))) + (message-header-other-face ((t (:foreground "gold")))) + (message-header-subject-face ((t (:foreground "gold")))) + (message-header-to-face ((t (:bold t :foreground "gold")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-separator-face ((t (:foreground "lime green")))) + (modeline ((t (:foreground "white" :background "black")))) + (modeline-buffer-id ((t (:foreground "white" :background "black")))) + (modeline-mousable ((t (:foreground "white" :background "black")))) + (modeline-mousable-minor-mode ((t (:foreground "white" :background "black")))) + (overlay-empty-face ((t (nil)))) + (primary-selection ((t (:background "firebrick" :foreground "white")))) + (region ((t (:background "firebrick" :foreground "white")))) + (secondary-selection ((t (:background "yellow2" :foreground "black")))) + (semantic-dirty-token-face ((t (:background "gray10")))) + (show-paren-match-face ((t (:background "deep sky blue" :foreground "black")))) + (show-paren-mismatch-face ((t (:background "firebrick" :foreground "white")))) + (underline ((t (:underline t :background "blue4" :foreground "white"))))))) + +;; In order to produce this, follow these steps: +;; +;; 0. Make sure .Xresources and .Xdefaults don't have any Emacs related +;; entries. +;; +;; 1. cd into the Emacs lisp directory and run the following command: +;; ( for d in `find -type d`; \ +;; do grep --files-with-matches 'defface[ ]' $d/*.el; \ +;; done ) | sort | uniq +;; Put the result in a lisp block, using load-library calls. +;; +;; Repeat this for any directories on your load path which you want to +;; include in the standard. This might include W3, eshell, etc. +;; +;; Add some of the libraries that don't use defface: +;; +;; 2. Start emacs using the --no-init-file and --no-site-file command line +;; arguments. Evaluate the lisp block you prepared. +;; 3. Load color-theme and run color-theme-print. Save the output and use it +;; to define color-theme-standard. +;; +;; (progn +;; (load-library "add-log") +;; (load-library "calendar") +;; (load-library "comint") +;; (load-library "cus-edit") +;; (load-library "cus-face") +;; (load-library "custom") +;; (load-library "diff-mode") +;; (load-library "ediff-init") +;; (load-library "re-builder") +;; (load-library "viper-init") +;; (load-library "enriched") +;; (load-library "em-ls") +;; (load-library "em-prompt") +;; (load-library "esh-test") +;; (load-library "faces") +;; (load-library "font-lock") +;; (load-library "generic-x") +;; (load-library "gnus-art") +;; (load-library "gnus-cite") +;; (load-library "gnus") +;; (load-library "message") +;; (load-library "hilit-chg") +;; (load-library "hi-lock") +;; (load-library "info") +;; (load-library "isearch") +;; (load-library "log-view") +;; (load-library "paren") +;; (load-library "pcvs-info") +;; (load-library "antlr-mode") +;; (load-library "cperl-mode") +;; (load-library "ebrowse") +;; (load-library "idlwave") +;; (load-library "idlw-shell") +;; (load-library "make-mode") +;; (load-library "sh-script") +;; (load-library "vhdl-mode") +;; (load-library "smerge-mode") +;; (load-library "speedbar") +;; (load-library "strokes") +;; (load-library "artist") +;; (load-library "flyspell") +;; (load-library "texinfo") +;; (load-library "tex-mode") +;; (load-library "tooltip") +;; (load-library "vcursor") +;; (load-library "wid-edit") +;; (load-library "woman") +;; (load-library "term") +;; (load-library "man") +;; (load-file "/home/alex/elisp/color-theme.el") +;; (color-theme-print)) +;; +;; 4. Make the color theme usable on Xemacs (add more faces, resolve +;; :inherit attributes) +;; +(defun color-theme-emacs-21 () + "Color theme used by Emacs 21.1. +Added and adapted for XEmacs by Alex Schroeder. Adaptation mostly +consisted of resolving :inherit attributes and adding missing faces. +This theme includes faces from the following Emacs libraries: add-log +calendar comint cus-edit cus-face custom diff-mode ediff-init re-builder +viper-init enriched em-ls em-prompt esh-test faces font-lock generic-x +gnus-art gnus-cite gnus message hilit-chg hi-lock info isearch log-view +paren pcvs-info antlr-mode cperl-mode ebrowse idlwave idlw-shell +make-mode sh-script vhdl-mode smerge-mode speedbar strokes artist +flyspell texinfo tex-mode tooltip vcursor wid-edit woman term man" + (interactive) + (color-theme-install + '(color-theme-emacs-21 + ((background-color . "white") + (background-mode . light) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "black") + (mouse-color . "black")) + ((Man-overstrike-face . bold) + (Man-underline-face . underline) + (cperl-here-face . font-lock-string-face) + (cperl-invalid-face . underline) + (cperl-pod-face . font-lock-comment-face) + (cperl-pod-head-face . font-lock-variable-name-face) + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-cite-attribution-face . gnus-cite-attribution-face) + (gnus-mouse-face . highlight) + (gnus-signature-face . gnus-signature-face) + (gnus-summary-selected-face . gnus-summary-selected-face) + (help-highlight-face . underline) + (idlwave-class-arrow-face . bold) + (idlwave-shell-breakpoint-face . idlwave-shell-bp-face) + (idlwave-shell-expression-face . secondary-selection) + (idlwave-shell-stop-line-face . highlight) + (ispell-highlight-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight) + (viper-insert-state-cursor-color . "Green") + (viper-replace-overlay-cursor-color . "Red") + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (Info-title-1-face ((t (:bold t :weight bold :family "helv" :height 1.728)))) + (Info-title-2-face ((t (:bold t :family "helv" :weight bold :height 1.44)))) + (Info-title-3-face ((t (:bold t :weight bold :family "helv" :height 1.2)))) + (Info-title-4-face ((t (:bold t :family "helv" :weight bold)))) + (antlr-font-lock-keyword-face ((t (:bold t :foreground "black" :weight bold)))) + (antlr-font-lock-literal-face ((t (:bold t :foreground "brown4" :weight bold)))) + (antlr-font-lock-ruledef-face ((t (:bold t :foreground "blue" :weight bold)))) + (antlr-font-lock-ruleref-face ((t (:foreground "blue4")))) + (antlr-font-lock-tokendef-face ((t (:bold t :foreground "blue" :weight bold)))) + (antlr-font-lock-tokenref-face ((t (:foreground "orange4")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (calendar-today-face ((t (:underline t)))) + (change-log-acknowledgement-face ((t (:foreground "Firebrick")))) + (change-log-conditionals-face ((t (:foreground "DarkGoldenrod")))) + (change-log-date-face ((t (:foreground "RosyBrown")))) + (change-log-email-face ((t (:foreground "DarkGoldenrod")))) + (change-log-file-face ((t (:foreground "Blue")))) + (change-log-function-face ((t (:foreground "DarkGoldenrod")))) + (change-log-list-face ((t (:foreground "Purple")))) + (change-log-name-face ((t (:foreground "CadetBlue")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "dark blue")))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue" :weight bold)))) + (cperl-hash-face ((t (:italic t :bold t :background "lightyellow2" :foreground "Red" :slant italic :weight bold)))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (cursor ((t (:background "black")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "gray85")))) + (custom-comment-tag-face ((t (:foreground "blue4")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:bold t :foreground "blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "red" :weight bold :height 1.2)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "blue" :weight bold :height 1.2)))) + (cvs-filename-face ((t (:foreground "blue4")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:bold t :foreground "blue4" :weight bold)))) + (cvs-marked-face ((t (:bold t :foreground "green3" :weight bold)))) + (cvs-msg-face ((t (:italic t :slant italic)))) + (cvs-need-action-face ((t (:foreground "orange")))) + (cvs-unknown-face ((t (:foreground "red")))) + (diary-face ((t (:foreground "red")))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (:foreground "grey50")))) + (diff-file-header-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-function-face ((t (:foreground "grey50")))) + (diff-header-face ((t (:background "grey85")))) + (diff-hunk-header-face ((t (:background "grey85")))) + (diff-index-face ((t (:bold t :weight bold :background "grey70")))) + (diff-nonexistent-face ((t (:bold t :weight bold :background "grey70")))) + (diff-removed-face ((t (nil)))) + (dired-face-boring ((t (:foreground "RosyBrown")))) + (dired-face-directory ((t (:foreground "Blue")))) + (dired-face-executable ((t (nil)))) + (dired-face-flagged ((t (:foreground "Red" :weight bold)))) + (dired-face-marked ((t (:foreground "Red" :weight bold)))) + (dired-face-permissions ((t (nil)))) + (dired-face-setuid ((t (nil)))) + (dired-face-socket ((t (nil)))) + (dired-face-symlink ((t (:foreground "Purple")))) + (ebrowse-default-face ((t (nil)))) + (ebrowse-file-name-face ((t (:italic t :slant italic)))) + (ebrowse-member-attribute-face ((t (:foreground "red")))) + (ebrowse-member-class-face ((t (:foreground "purple")))) + (ebrowse-progress-face ((t (:background "blue")))) + (ebrowse-root-class-face ((t (:bold t :foreground "blue" :weight bold)))) + (ebrowse-tree-mark-face ((t (:foreground "red")))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid" :weight bold)))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed" :weight bold)))) + (eshell-ls-directory-face ((t (:bold t :foreground "Blue" :weight bold)))) + (eshell-ls-executable-face ((t (:bold t :foreground "ForestGreen" :weight bold)))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red" :weight bold)))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta" :weight bold)))) + (eshell-ls-symlink-face ((t (:bold t :foreground "Dark Cyan" :weight bold)))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:bold t :foreground "Red" :weight bold)))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed" :weight bold)))) + (eshell-test-ok-face ((t (:bold t :foreground "Green" :weight bold)))) + (excerpt ((t (:italic t :slant italic)))) + (fixed ((t (:bold t :weight bold)))) + (fixed-pitch ((t (:family "courier")))) + (flyspell-duplicate-face ((t (:bold t :foreground "Gold3" :underline t :weight bold)))) + (flyspell-incorrect-face ((t (:bold t :foreground "OrangeRed" :underline t :weight bold)))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:foreground "Firebrick")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-doc-face ((t (:foreground "RosyBrown")))) + (font-lock-doc-string-face ((t (:foreground "RosyBrown")))) + (font-lock-function-name-face ((t (:foreground "Blue")))) + (font-lock-keyword-face ((t (:foreground "Purple")))) + (font-lock-preprocessor-face ((t (:foreground "CadetBlue")))) + (font-lock-reference-face ((t (:foreground "Orchid")))) + (font-lock-string-face ((t (:foreground "RosyBrown")))) + (font-lock-type-face ((t (:foreground "ForestGreen")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Red" :weight bold)))) + (fringe ((t (:background "grey95")))) + (gnus-cite-attribution-face ((t (:italic t :slant italic)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :weight bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t :slant italic)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t :weight bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t :slant italic)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4" :weight bold)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :weight bold)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t :weight bold)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t :weight bold)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen" :weight bold)))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4" :slant italic)))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "MidnightBlue" :slant italic)))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-signature-face ((t (:italic t :slant italic)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue" :slant italic)))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen" :slant italic)))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick" :slant italic)))) + (gnus-summary-low-unread-face ((t (:italic t :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (header-line ((t (:box (:line-width -1 :style released-button) :background "grey90" :foreground "grey20" :box nil)))) + (hi-black-b ((t (:bold t :weight bold)))) + (hi-black-hb ((t (:bold t :family "helv" :weight bold :height 1.67)))) + (hi-blue ((t (:background "light blue")))) + (hi-blue-b ((t (:bold t :foreground "blue" :weight bold)))) + (hi-green ((t (:background "green")))) + (hi-green-b ((t (:bold t :foreground "green" :weight bold)))) + (hi-pink ((t (:background "pink")))) + (hi-red-b ((t (:bold t :foreground "red" :weight bold)))) + (hi-yellow ((t (:background "yellow")))) + (highlight ((t (:background "darkseagreen2")))) + (highlight-changes-delete-face ((t (:foreground "red" :underline t)))) + (highlight-changes-face ((t (:foreground "red")))) + (holiday-face ((t (:background "pink")))) + (idlwave-help-link-face ((t (:foreground "Blue")))) + (idlwave-shell-bp-face ((t (:background "Pink" :foreground "Black")))) + (info-header-node ((t (:italic t :bold t :weight bold :slant italic :foreground "brown")))) + (info-header-xref ((t (:bold t :weight bold :foreground "magenta4")))) + (info-menu-5 ((t (:foreground "red1")))) + (info-menu-header ((t (:bold t :family "helv" :weight bold)))) + (info-node ((t (:italic t :bold t :foreground "brown" :slant italic :weight bold)))) + (info-xref ((t (:bold t :foreground "magenta4" :weight bold)))) + (isearch ((t (:background "magenta4" :foreground "lightskyblue1")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise")))) + (italic ((t (:italic t :slant italic)))) + (log-view-file-face ((t (:bold t :background "grey70" :weight bold)))) + (log-view-message-face ((t (:background "grey85")))) + (makefile-space-face ((t (:background "hotpink")))) + (menu ((t (nil)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue" :weight bold)))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue" :weight bold)))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (modeline-buffer-id ((t (:bold t :background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (modeline-mousable ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (modeline-mousable-minor-mode ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (mouse ((t (:background "black")))) + (primary-selection ((t (:background "lightgoldenrod2")))) + (reb-match-0 ((t (:background "lightblue")))) + (reb-match-1 ((t (:background "aquamarine")))) + (reb-match-2 ((t (:background "springgreen")))) + (reb-match-3 ((t (:background "yellow")))) + (region ((t (:background "lightgoldenrod2")))) + (scroll-bar ((t (:background "grey75")))) + (secondary-selection ((t (:background "yellow")))) + (sh-heredoc-face ((t (:foreground "tan")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (show-tabs-space-face ((t (:foreground "yellow")))) + (show-tabs-tab-face ((t (:foreground "red")))) + (smerge-base-face ((t (:foreground "red")))) + (smerge-markers-face ((t (:background "grey85")))) + (smerge-mine-face ((t (:foreground "blue")))) + (smerge-other-face ((t (:foreground "darkgreen")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "brown")))) + (strokes-char-face ((t (:background "lightgray")))) + (term-black ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-blackbg ((t (:stipple nil :background "black" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-blue ((t (:stipple nil :background "white" :foreground "blue" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-bluebg ((t (:stipple nil :background "blue" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-bold ((t (:bold t :stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight bold :width normal :family "adobe-courier")))) + (term-cyan ((t (:stipple nil :background "white" :foreground "cyan" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-cyanbg ((t (:stipple nil :background "cyan" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-bg ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-bg-inv ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-fg ((t (:stipple nil :background "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-fg-inv ((t (:stipple nil :background "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-green ((t (:stipple nil :background "white" :foreground "green" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-greenbg ((t (:stipple nil :background "green" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-invisible ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-invisible-inv ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-magenta ((t (:stipple nil :background "white" :foreground "magenta" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-magentabg ((t (:stipple nil :background "magenta" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-red ((t (:stipple nil :background "white" :foreground "red" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-redbg ((t (:stipple nil :background "red" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-underline ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline t :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-white ((t (:stipple nil :background "white" :foreground "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-whitebg ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-yellow ((t (:stipple nil :background "white" :foreground "yellow" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-yellowbg ((t (:stipple nil :background "yellow" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (tex-math-face ((t (:foreground "RosyBrown")))) + (texinfo-heading-face ((t (:foreground "Blue")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (vcursor ((t (:background "cyan" :foreground "blue" :underline t)))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red" :weight bold)))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange" :weight bold)))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:foreground "Blue" :underline t)))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:foreground "DarkGoldenrod" :underline t)))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:foreground "ForestGreen" :underline t)))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:foreground "Brown" :underline t)))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:foreground "Grey50" :underline t)))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (woman-addition-face ((t (:foreground "orange")))) + (woman-bold-face ((t (:bold t :foreground "blue" :weight bold)))) + (woman-italic-face ((t (:italic t :foreground "red" :underline t :slant italic)))) + (woman-unknown-face ((t (:foreground "brown")))) + (zmacs-region ((t (:background "lightgoldenrod2"))))))) + +(defun color-theme-jsc-light2 () + "Color theme by John S Cooper, created 2001-10-29. +This builds on `color-theme-jsc-light'." + (interactive) + (color-theme-jsc-light) + (let ((color-theme-is-cumulative t)) + (color-theme-install + '(color-theme-jsc-light2 + ((vc-annotate-very-old-color . "#0046FF") + (senator-eldoc-use-color . t)) + nil + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (change-log-file-face ((t (:foreground "Blue")))) + (change-log-name-face ((t (:foreground "Maroon")))) + (comint-highlight-prompt ((t (:foreground "dark blue")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:bold t :foreground "blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "red" :weight bold :height 1.2)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "blue" :weight bold :height 1.2)))) + (font-lock-constant-face ((t (:foreground "Maroon")))) + (font-lock-function-name-face ((t (:foreground "Blue")))) + (font-lock-type-face ((t (:italic t :foreground "Navy" :slant italic)))) + (fringe ((t (:background "grey88")))) + (gnus-group-mail-1-empty-face ((t (:foreground "Blue2")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen" :weight bold)))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4" :slant italic)))) + (gnus-header-name-face ((t (:bold t :foreground "maroon" :weight bold)))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-signature-face ((t (:italic t :slant italic)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :weight bold)))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "Navy")))) + (gnus-summary-normal-unread-face ((t (:bold t :foreground "DarkGreen" :weight bold)))) + (header-line ((t (:background "grey90" :foreground "grey20" :box nil)))) + (highlight ((t (:background "darkseagreen2")))) + (ido-subdir-face ((t (:foreground "red")))) + (isearch ((t (:background "magenta4" :foreground "lightskyblue1")))) + (mode-line ((t (:background "grey88" :foreground "black" :box (:line-width -1 :style released-button))))) + (region ((t (:background "lightgoldenrod2")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "yellow")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (tooltip ((t (:background "lightyellow" :foreground "black")))))))) + +(defun color-theme-ld-dark () + "Dark Color theme by Linh Dang, created 2001-11-06." + (interactive) + (color-theme-install + '(color-theme-ld-dark + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "yellow") + (foreground-color . "white") + (mouse-color . "white")) + ((align-highlight-change-face . highlight) + (align-highlight-nochange-face . secondary-selection) + (apropos-keybinding-face . underline) + (apropos-label-face . italic) + (apropos-match-face . secondary-selection) + (apropos-property-face . bold-italic) + (apropos-symbol-face . bold) + (ebnf-except-border-color . "Black") + (ebnf-line-color . "Black") + (ebnf-non-terminal-border-color . "Black") + (ebnf-repeat-border-color . "Black") + (ebnf-special-border-color . "Black") + (ebnf-terminal-border-color . "Black") + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-carpal-button-face . bold) + (gnus-carpal-header-face . bold-italic) + (gnus-cite-attribution-face . gnus-cite-attribution-face) + (gnus-mouse-face . highlight) + (gnus-selected-tree-face . modeline) + (gnus-signature-face . gnus-signature-face) + (gnus-summary-selected-face . gnus-summary-selected-face) + (help-highlight-face . underline) + (list-matching-lines-face . bold) + (ps-line-number-color . "black") + (ps-zebra-color . 0.95) + (tags-tag-face . default) + (vc-annotate-very-old-color . "#0046FF") + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "black" :foreground "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-courier new")))) + (Info-title-1-face ((t (:bold t :weight bold :family "helv" :height 1.728)))) + (Info-title-2-face ((t (:bold t :family "helv" :weight bold :height 1.44)))) + (Info-title-3-face ((t (:bold t :weight bold :family "helv" :height 1.2)))) + (Info-title-4-face ((t (:bold t :family "helv" :weight bold)))) + (bbdb-company ((t (:italic t :slant italic)))) + (bbdb-field-name ((t (:bold t :weight bold)))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (:underline t)))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (change-log-acknowledgement-face ((t (:italic t :slant oblique :foreground "AntiqueWhite3")))) + (change-log-conditionals-face ((t (:foreground "Aquamarine")))) + (change-log-date-face ((t (:italic t :slant oblique :foreground "BurlyWood")))) + (change-log-email-face ((t (:foreground "Aquamarine")))) + (change-log-file-face ((t (:bold t :family "Verdana" :weight bold :foreground "LightSkyBlue" :height 0.9)))) + (change-log-function-face ((t (:foreground "Aquamarine")))) + (change-log-list-face ((t (:foreground "LightSkyBlue")))) + (change-log-name-face ((t (:bold t :weight bold :foreground "Gold")))) + (clear-case-mode-string-face ((t (:bold t :family "Arial" :box (:line-width 2 :color "grey" :style released-button) :foreground "black" :background "grey" :weight bold :height 0.9)))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cursor ((t (:background "yellow")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "dim gray")))) + (custom-comment-tag-face ((t (:foreground "gray80")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.1)))) + (custom-group-tag-face ((t (:bold t :family "helv" :foreground "light blue" :weight bold :height 1.1)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "pink" :weight bold :height 1.1)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "lime green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "light blue" :weight bold :height 1.2)))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (:foreground "grey70")))) + (diff-file-header-face ((t (:bold t :background "grey60" :weight bold)))) + (diff-function-face ((t (:foreground "grey70")))) + (diff-header-face ((t (:background "grey45")))) + (diff-hunk-header-face ((t (:background "grey45")))) + (diff-index-face ((t (:bold t :weight bold :background "grey60")))) + (diff-nonexistent-face ((t (:bold t :weight bold :background "grey60")))) + (diff-removed-face ((t (nil)))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:foreground "SteelBlue")))) + (font-lock-comment-face ((t (:italic t :foreground "AntiqueWhite3" :slant oblique)))) + (font-lock-constant-face ((t (:bold t :foreground "Gold" :weight bold)))) + (font-lock-doc-face ((t (:italic t :slant oblique :foreground "BurlyWood")))) + (font-lock-doc-string-face ((t (:italic t :slant oblique :foreground "BurlyWood")))) + (font-lock-function-name-face ((t (:bold t :foreground "LightSkyBlue" :weight bold :height 0.9 :family "Verdana")))) + (font-lock-keyword-face ((t (:foreground "LightSkyBlue")))) + (font-lock-preprocessor-face ((t (:bold t :foreground "Gold" :weight bold)))) + (font-lock-reference-face ((t (:foreground "SteelBlue")))) + (font-lock-string-face ((t (:italic t :foreground "BurlyWood" :slant oblique)))) + (font-lock-type-face ((t (:bold t :foreground "PaleGreen" :weight bold :height 0.9 :family "Verdana")))) + (font-lock-variable-name-face ((t (:foreground "Aquamarine")))) + (font-lock-warning-face ((t (:bold t :foreground "chocolate" :weight bold)))) + (fringe ((t (:family "outline-courier new" :width normal :weight normal :slant normal :underline nil :overline nil :strike-through nil :box nil :inverse-video nil :stipple nil :background "grey4" :foreground "Wheat")))) + (gnus-cite-attribution-face ((t (:italic t :slant italic)))) + (gnus-cite-face-1 ((t (:foreground "light blue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "light cyan")))) + (gnus-cite-face-3 ((t (:foreground "light yellow")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :weight bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t :slant italic)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t :weight bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t :slant italic)))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "aquamarine3" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :weight bold)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t :weight bold)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t :weight bold)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise" :weight bold)))) + (gnus-header-content-face ((t (:italic t :foreground "forest green" :slant italic)))) + (gnus-header-from-face ((t (:foreground "spring green")))) + (gnus-header-name-face ((t (:foreground "SeaGreen")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "yellow" :slant italic)))) + (gnus-header-subject-face ((t (:foreground "SeaGreen3")))) + (gnus-signature-face ((t (:italic t :slant italic)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "pink" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue" :slant italic)))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen" :slant italic)))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "pink" :slant italic)))) + (gnus-summary-low-unread-face ((t (:italic t :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (header-line ((t (:family "Arial" :background "grey20" :foreground "grey75" :box (:line-width 3 :color "grey20" :style released-button) :height 0.9)))) + (highlight ((t (:background "darkolivegreen")))) + (info-header-node ((t (:italic t :bold t :weight bold :slant italic :foreground "white")))) + (info-header-xref ((t (:bold t :weight bold :foreground "cyan")))) + (info-menu-5 ((t (:foreground "red1")))) + (info-menu-header ((t (:bold t :family "helv" :weight bold)))) + (info-node ((t (:italic t :bold t :foreground "white" :slant italic :weight bold)))) + (info-xref ((t (:bold t :foreground "cyan" :weight bold)))) + (isearch ((t (:background "palevioletred2")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (makefile-space-face ((t (:background "hotpink")))) + (menu ((t (nil)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "green4" :weight bold)))) + (message-header-name-face ((t (:foreground "DarkGreen")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "#b00000")))) + (message-header-subject-face ((t (:foreground "green3")))) + (message-header-to-face ((t (:bold t :foreground "green2" :weight bold)))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "blue3")))) + (modeline ((t (:background "grey" :foreground "black" :box (:line-width 2 :color "grey" :style released-button) :height 0.9 :family "Arial")))) + (modeline-mousable-minor-mode ((t (:background "grey" :foreground "black" :box (:line-width 2 :color "grey" :style released-button) :height 0.9 :family "Arial")))) + (modeline-mousable ((t (:background "grey" :foreground "black" :box (:line-width 2 :color "grey" :style released-button) :height 0.9 :family "Arial")))) + (modeline-buffer-id ((t (:background "grey" :foreground "black" :box (:line-width 2 :color "grey" :style released-button) :height 0.9 :family "Arial")))) + (mouse ((t (:background "white")))) + (primary-selection ((t (:background "DarkSlateGray")))) + (region ((t (:background "DarkSlateGray")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "SkyBlue4")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (trailing-whitespace ((t (:background "white")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray")))) + (zmacs-region ((t (:background "DarkSlateGray"))))))) + +(defun color-theme-deep-blue () + "Color theme by Tomas Cerha, created 2001-11-13." + (interactive) + (color-theme-install + '(color-theme-deep-blue + ((background-color . "#102e4e") + (background-mode . dark) + (border-color . "black") + (cursor-color . "green") + (foreground-color . "#eeeeee") + (mouse-color . "white")) + ((browse-kill-ring-separator-face . bold) + (display-time-mail-face . mode-line) + (help-highlight-face . underline) + (list-matching-lines-face . secondary-selection) + (vc-annotate-very-old-color . "#0046FF") + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "#102e4e" :foreground "#eeeeee" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "misc-fixed")))) + (Info-title-1-face ((t (:bold t :weight bold :family "helv" :height 1.728)))) + (Info-title-2-face ((t (:bold t :family "helv" :weight bold :height 1.44)))) + (Info-title-3-face ((t (:bold t :weight bold :family "helv" :height 1.2)))) + (Info-title-4-face ((t (:bold t :family "helv" :weight bold)))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (calendar-today-face ((t (:background "blue")))) + (change-log-acknowledgement-face ((t (:italic t :slant italic :foreground "CadetBlue")))) + (change-log-conditionals-face ((t (:foreground "SeaGreen2")))) + (change-log-date-face ((t (:foreground "burlywood")))) + (change-log-email-face ((t (:foreground "SeaGreen2")))) + (change-log-file-face ((t (:bold t :weight bold :foreground "goldenrod")))) + (change-log-function-face ((t (:foreground "SeaGreen2")))) + (change-log-list-face ((t (:bold t :weight bold :foreground "DeepSkyBlue1")))) + (change-log-name-face ((t (:foreground "gold")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cursor ((t (:background "green" :foreground "black")))) + (cvs-filename-face ((t (:foreground "lightblue")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:bold t :foreground "lightyellow" :weight bold)))) + (cvs-marked-face ((t (:bold t :foreground "green" :weight bold)))) + (cvs-msg-face ((t (:italic t :slant italic)))) + (cvs-need-action-face ((t (:foreground "orange")))) + (cvs-unknown-face ((t (:foreground "red")))) + (diary-face ((t (:foreground "orange red")))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (:foreground "grey70")))) + (diff-file-header-face ((t (:bold t :background "grey60" :weight bold)))) + (diff-function-face ((t (:foreground "grey70")))) + (diff-header-face ((t (:background "grey45")))) + (diff-hunk-header-face ((t (:background "grey45")))) + (diff-index-face ((t (:bold t :weight bold :background "grey60")))) + (diff-nonexistent-face ((t (:bold t :weight bold :background "grey60")))) + (diff-removed-face ((t (nil)))) + (fixed-pitch ((t (:family "fixed")))) + (font-latex-bold-face ((t (:bold t :foreground "OliveDrab" :weight bold)))) + (font-latex-italic-face ((t (:italic t :foreground "OliveDrab" :slant italic)))) + (font-latex-math-face ((t (:foreground "burlywood")))) + (font-latex-sedate-face ((t (:foreground "LightGray")))) + (font-latex-string-face ((t (:foreground "LightSalmon")))) + (font-latex-warning-face ((t (:bold t :foreground "Pink" :weight bold)))) + (font-lock-builtin-face ((t (:foreground "LightCoral")))) + (font-lock-comment-face ((t (:italic t :foreground "CadetBlue" :slant italic)))) + (font-lock-constant-face ((t (:foreground "gold")))) + (font-lock-doc-face ((t (:foreground "BlanchedAlmond")))) + (font-lock-doc-string-face ((t (:foreground "BlanchedAlmond")))) + (font-lock-function-name-face ((t (:bold t :foreground "goldenrod" :weight bold)))) + (font-lock-keyword-face ((t (:bold t :foreground "DeepSkyBlue1" :weight bold)))) + (font-lock-preprocessor-face ((t (:foreground "gold")))) + (font-lock-reference-face ((t (:foreground "LightCoral")))) + (font-lock-string-face ((t (:foreground "burlywood")))) + (font-lock-type-face ((t (:foreground "CadetBlue1")))) + (font-lock-variable-name-face ((t (:foreground "SeaGreen2")))) + (font-lock-warning-face ((t (:foreground "yellow")))) + (fringe ((t (:background "#405060")))) + (header-line ((t (:box (:line-width 2 :style released-button) :background "grey20" :foreground "grey90" :box nil)))) + (highlight ((t (:background "darkgreen")))) + (holiday-face ((t (:foreground "green")))) + (info-header-node ((t (:foreground "DeepSkyBlue1")))) + (info-header-xref ((t (:bold t :weight bold :foreground "SeaGreen2")))) + (info-menu-5 ((t (:foreground "wheat")))) + (info-menu-header ((t (:bold t :family "helv" :weight bold)))) + (info-node ((t (:foreground "DeepSkyBlue1")))) + (info-xref ((t (:bold t :foreground "SeaGreen2" :weight bold)))) + (isearch ((t (:background "palevioletred2" :foreground "brown4")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (menu ((t (:background "gray" :foreground "black" :family "helvetica")))) + (modeline ((t (:background "gray" :foreground "black" :box (:line-width 2 :style released-button))))) + (modeline-buffer-id ((t (:background "gray" :foreground "black" :box (:line-width 2 :style released-button))))) + (modeline-mousable ((t (:background "gray" :foreground "black" :box (:line-width 2 :style released-button))))) + (modeline-mousable-minor-mode ((t (:background "gray" :foreground "black" :box (:line-width 2 :style released-button))))) + (mouse ((t (:background "white")))) + (region ((t (:background "DarkCyan")))) + (scroll-bar ((t (:background "gray" :foreground "#506070")))) + (secondary-selection ((t (:background "yellow" :foreground "gray10")))) + (show-paren-match-face ((t (:bold t :foreground "yellow" :weight bold)))) + (show-paren-mismatch-face ((t (:bold t :foreground "red" :weight bold)))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "#102e4e")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray"))))))) + +(defun color-theme-kingsajz () + "Color theme by Olgierd \"Kingsajz\" Ziolko, created 2001-12-04. +Another theme with wheat on DarkSlatGrey. Based on Subtle Hacker. +Used on Emacs 21.1 @ WinMe. Not tested on any other systems. + +Some faces uses Andale mono font (nice fixed-width font). +It is available at: http://www.microsoft.com/typography/downloads/andale32.exe + +Hail Eris! All hail Discordia!" + (interactive) + (color-theme-install + '(color-theme-kingsajz + ((background-color . "darkslategrey") + (background-mode . dark) + (border-color . "black") + (cursor-color . "LightGray") + (foreground-color . "wheat") + (mouse-color . "Grey")) + ((apropos-keybinding-face . underline) + (apropos-label-face face italic mouse-face highlight) + (apropos-match-face . secondary-selection) + (apropos-property-face . bold-italic) + (apropos-symbol-face . info-xref) + (display-time-mail-face . mode-line) + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-carpal-button-face . bold) + (gnus-carpal-header-face . bold-italic) + (gnus-cite-attribution-face . gnus-cite-attribution-face) + (gnus-mouse-face . highlight) + (gnus-selected-tree-face . modeline) + (gnus-signature-face . gnus-signature-face) + (gnus-summary-selected-face . gnus-summary-selected-face) + (gnus-treat-display-xface . head) + (help-highlight-face . underline) + (list-matching-lines-face . bold) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "darkslategrey" :foreground "wheat" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-andale mono")))) + (bbdb-field-name ((t (:foreground "green")))) + (bg:erc-color-face0 ((t (:background "White")))) + (bg:erc-color-face1 ((t (:background "black")))) + (bg:erc-color-face10 ((t (:background "lightblue1")))) + (bg:erc-color-face11 ((t (:background "cyan")))) + (bg:erc-color-face12 ((t (:background "blue")))) + (bg:erc-color-face13 ((t (:background "deeppink")))) + (bg:erc-color-face14 ((t (:background "gray50")))) + (bg:erc-color-face15 ((t (:background "gray90")))) + (bg:erc-color-face2 ((t (:background "blue4")))) + (bg:erc-color-face3 ((t (:background "green4")))) + (bg:erc-color-face4 ((t (:background "red")))) + (bg:erc-color-face5 ((t (:background "brown")))) + (bg:erc-color-face6 ((t (:background "purple")))) + (bg:erc-color-face7 ((t (:background "orange")))) + (bg:erc-color-face8 ((t (:background "yellow")))) + (bg:erc-color-face9 ((t (:background "green")))) + (blue ((t (:foreground "cyan")))) + (bold ((t (:bold t :foreground "OrangeRed" :weight bold :family "Arial")))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold :family "Arial")))) + (border ((t (:background "black")))) + (calendar-today-face ((t (:underline t)))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cperl-array-face ((t (:foreground "Yellow")))) + (cperl-hash-face ((t (:foreground "White")))) + (cperl-nonoverridable-face ((t (:foreground "SkyBlue")))) + (cursor ((t (:background "LightGray")))) + (custom-button-face ((t (:foreground "MediumSlateBlue" :underline t)))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "dim gray")))) + (custom-comment-tag-face ((t (:foreground "gray80")))) + (custom-documentation-face ((t (:foreground "Grey")))) + (custom-face-tag-face ((t (:bold t :family "Arial" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:foreground "MediumAquamarine")))) + (custom-group-tag-face-1 ((t (:bold t :family "Arial" :foreground "pink" :weight bold :height 1.2)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "Coral")))) + (custom-variable-button-face ((t (:underline t)))) + (custom-variable-tag-face ((t (:foreground "Aquamarine")))) + (date ((t (:foreground "green")))) + (diary-face ((t (:bold t :foreground "IndianRed" :weight bold)))) + (dired-face-directory ((t (:bold t :foreground "sky blue" :weight bold)))) + (dired-face-executable ((t (:foreground "green yellow")))) + (dired-face-flagged ((t (:foreground "tomato")))) + (dired-face-marked ((t (:foreground "light salmon")))) + (dired-face-permissions ((t (:foreground "aquamarine")))) + (erc-action-face ((t (:bold t :weight bold)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "pale green")))) + (erc-error-face ((t (:bold t :foreground "IndianRed" :weight bold)))) + (erc-highlight-face ((t (:bold t :foreground "pale green" :weight bold)))) + (erc-host-danger-face ((t (:foreground "red")))) + (erc-input-face ((t (:foreground "light blue")))) + (erc-inverse-face ((t (:background "steel blue")))) + (erc-notice-face ((t (:foreground "light salmon")))) + (erc-pal-face ((t (:foreground "pale green")))) + (erc-prompt-face ((t (:bold t :foreground "light blue" :weight bold)))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :foreground "IndianRed" :weight bold)))) + (eshell-ls-backup-face ((t (:foreground "Grey")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "DimGray" :weight bold)))) + (eshell-ls-directory-face ((t (:bold t :foreground "MediumSlateBlue" :weight bold)))) + (eshell-ls-executable-face ((t (:bold t :foreground "Coral" :weight bold)))) + (eshell-ls-missing-face ((t (:bold t :foreground "black" :weight bold)))) + (eshell-ls-picture-face ((t (:foreground "Violet")))) + (eshell-ls-product-face ((t (:foreground "LightSalmon")))) + (eshell-ls-readonly-face ((t (:foreground "Aquamarine")))) + (eshell-ls-special-face ((t (:bold t :foreground "Gold" :weight bold)))) + (eshell-ls-symlink-face ((t (:bold t :foreground "White" :weight bold)))) + (eshell-ls-text-face ((t (:foreground "medium aquamarine")))) + (eshell-ls-todo-face ((t (:bold t :foreground "aquamarine" :weight bold)))) + (eshell-ls-unreadable-face ((t (:foreground "DimGray")))) + (eshell-prompt-face ((t (:foreground "powder blue")))) + (face-1 ((t (:stipple nil :foreground "royal blue" :family "andale mono")))) + (face-2 ((t (:stipple nil :foreground "DeepSkyBlue1" :overline nil :underline nil :slant normal :family "outline-andale mono")))) + (face-3 ((t (:stipple nil :foreground "NavajoWhite3")))) + (fg:erc-color-face0 ((t (:foreground "white")))) + (fg:erc-color-face1 ((t (:foreground "beige")))) + (fg:erc-color-face10 ((t (:foreground "pale goldenrod")))) + (fg:erc-color-face11 ((t (:foreground "light goldenrod yellow")))) + (fg:erc-color-face12 ((t (:foreground "light yellow")))) + (fg:erc-color-face13 ((t (:foreground "yellow")))) + (fg:erc-color-face14 ((t (:foreground "light goldenrod")))) + (fg:erc-color-face15 ((t (:foreground "lime green")))) + (fg:erc-color-face2 ((t (:foreground "lemon chiffon")))) + (fg:erc-color-face3 ((t (:foreground "light cyan")))) + (fg:erc-color-face4 ((t (:foreground "powder blue")))) + (fg:erc-color-face5 ((t (:foreground "sky blue")))) + (fg:erc-color-face6 ((t (:foreground "dark sea green")))) + (fg:erc-color-face7 ((t (:foreground "pale green")))) + (fg:erc-color-face8 ((t (:foreground "medium spring green")))) + (fg:erc-color-face9 ((t (:foreground "khaki")))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:bold t :foreground "PaleGreen" :weight bold)))) + (font-lock-comment-face ((t (:foreground "White")))) + (font-lock-constant-face ((t (:bold t :foreground "Aquamarine" :weight bold)))) + (font-lock-doc-face ((t (:italic t :slant italic :foreground "LightSalmon")))) + (font-lock-doc-string-face ((t (:foreground "LightSalmon")))) + (font-lock-function-name-face ((t (:bold t :foreground "MediumSlateBlue" :weight bold)))) + (font-lock-keyword-face ((t (:foreground "Salmon")))) + (font-lock-preprocessor-face ((t (:foreground "Salmon")))) + (font-lock-reference-face ((t (:foreground "pale green")))) + (font-lock-string-face ((t (:italic t :foreground "LightSalmon" :slant italic)))) + (font-lock-type-face ((t (:bold t :foreground "YellowGreen" :weight bold)))) + (font-lock-variable-name-face ((t (:italic t :bold t :foreground "Aquamarine" :slant italic :weight bold)))) + (font-lock-warning-face ((t (:bold t :foreground "IndianRed" :weight bold)))) + (fringe ((t (:background "darkslategrey")))) + (gnus-cite-attribution-face ((t (:family "arial")))) + (gnus-cite-face-1 ((t (:foreground "DarkGoldenrod3")))) + (gnus-cite-face-10 ((t (nil)))) + (gnus-cite-face-11 ((t (nil)))) + (gnus-cite-face-2 ((t (:foreground "IndianRed3")))) + (gnus-cite-face-3 ((t (:foreground "tomato")))) + (gnus-cite-face-4 ((t (:foreground "yellow green")))) + (gnus-cite-face-5 ((t (:foreground "SteelBlue3")))) + (gnus-cite-face-6 ((t (:foreground "Azure3")))) + (gnus-cite-face-7 ((t (:foreground "Azure4")))) + (gnus-cite-face-8 ((t (:foreground "SpringGreen4")))) + (gnus-cite-face-9 ((t (:foreground "SlateGray4")))) + (gnus-emphasis-bold ((t (:bold t :foreground "greenyellow" :weight bold :family "Arial")))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :foreground "OrangeRed1" :slant italic :weight bold :family "arial")))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "khaki")))) + (gnus-emphasis-italic ((t (:italic t :bold t :foreground "orange" :slant italic :weight bold :family "Arial")))) + (gnus-emphasis-underline ((t (:foreground "greenyellow" :underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :foreground "khaki" :underline t :weight bold :family "Arial")))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight bold :family "Arial")))) + (gnus-emphasis-underline-italic ((t (:italic t :foreground "orange" :underline t :slant italic :family "Arial")))) + (gnus-group-mail-1-empty-face ((t (:foreground "Salmon4")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "firebrick1" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "turquoise4")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "LightCyan4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "LightCyan1" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "SteelBlue4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "SteelBlue2" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "Salmon4")))) + (gnus-group-news-1-face ((t (:bold t :foreground "FireBrick1" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "darkorange3")))) + (gnus-group-news-2-face ((t (:bold t :foreground "dark orange" :weight bold)))) + (gnus-group-news-3-empty-face ((t (:foreground "turquoise4")))) + (gnus-group-news-3-face ((t (:bold t :foreground "Aquamarine" :weight bold)))) + (gnus-group-news-4-empty-face ((t (:foreground "SpringGreen4")))) + (gnus-group-news-4-face ((t (:bold t :foreground "SpringGreen2" :weight bold)))) + (gnus-group-news-5-empty-face ((t (:foreground "OliveDrab4")))) + (gnus-group-news-5-face ((t (:bold t :foreground "OliveDrab2" :weight bold)))) + (gnus-group-news-6-empty-face ((t (:foreground "DarkGoldenrod4")))) + (gnus-group-news-6-face ((t (:bold t :foreground "DarkGoldenrod3" :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "wheat4")))) + (gnus-group-news-low-face ((t (:bold t :foreground "tan4" :weight bold)))) + (gnus-header-content-face ((t (:foreground "LightSkyBlue3")))) + (gnus-header-from-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (gnus-header-name-face ((t (:bold t :foreground "DodgerBlue1" :weight bold)))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "LightSkyBlue3" :slant italic :weight bold)))) + (gnus-header-subject-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (gnus-signature-face ((t (:italic t :foreground "salmon" :slant italic)))) + (gnus-splash-face ((t (:foreground "Firebrick1")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "MistyRose4" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "tomato3" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "coral" :weight bold)))) + (gnus-summary-high-unread-face ((t (:italic t :bold t :foreground "red1" :slant italic :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "DarkSeaGreen4" :slant italic)))) + (gnus-summary-low-read-face ((t (:foreground "SeaGreen4")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "Green4" :slant italic)))) + (gnus-summary-low-unread-face ((t (:italic t :foreground "green3" :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "khaki4")))) + (gnus-summary-normal-ticked-face ((t (:foreground "khaki3")))) + (gnus-summary-normal-unread-face ((t (:foreground "khaki")))) + (gnus-summary-selected-face ((t (:foreground "gold" :underline t)))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:foreground "red" :background "black")))) + (gui-element ((t (:bold t :background "#ffffff" :foreground "#000000" :weight bold)))) + (header-line ((t (:box (:line-width -1 :style released-button) :background "grey20" :foreground "grey90" :box nil)))) + (highlight ((t (:background "PaleGreen" :foreground "DarkGreen")))) + (highline-face ((t (:background "SeaGreen")))) + (holiday-face ((t (:background "DimGray")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:bold t :foreground "DodgerBlue1" :underline t :weight bold)))) + (info-xref ((t (:bold t :foreground "DodgerBlue3" :weight bold)))) + (isearch ((t (:background "sea green" :foreground "black")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :foreground "chocolate3" :slant italic)))) + (menu ((t (nil)))) + (message-cited-text-face ((t (:foreground "White")))) + (message-header-cc-face ((t (:foreground "light cyan")))) + (message-header-name-face ((t (:foreground "DodgerBlue1")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "LightSkyBlue3" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "LightSkyBlue3")))) + (message-header-subject-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (message-header-to-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (message-header-xheader-face ((t (:foreground "DodgerBlue3")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:background "cornflower blue" :foreground "chocolate")))) + (modeline ((t (:background "dark olive green" :foreground "wheat" :box (:line-width -1 :style released-button))))) + (modeline-buffer-id ((t (:bold t :background "dark olive green" :foreground "beige" :weight bold :family "arial")))) + (modeline-mousable ((t (:bold t :background "dark olive green" :foreground "yellow green" :weight bold :family "arial")))) + (modeline-mousable-minor-mode ((t (:bold t :background "dark olive green" :foreground "wheat" :weight bold :family "arial")))) + (mouse ((t (:background "Grey")))) + (paren-blink-off ((t (:foreground "brown")))) + (region ((t (:background "dark cyan" :foreground "cyan")))) + (ruler-mode-column-number-face ((t (:box (:color "grey76" :line-width 1 :style released-button) :background "grey76" :stipple nil :inverse-video nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-andale mono" :foreground "black")))) + (ruler-mode-current-column-face ((t (:bold t :box (:color "grey76" :line-width 1 :style released-button) :background "grey76" :stipple nil :inverse-video nil :strike-through nil :overline nil :underline nil :slant normal :width normal :family "outline-andale mono" :foreground "yellow" :weight bold)))) + (ruler-mode-default-face ((t (:family "outline-andale mono" :width normal :weight normal :slant normal :underline nil :overline nil :strike-through nil :inverse-video nil :stipple nil :background "grey76" :foreground "grey64" :box (:color "grey76" :line-width 1 :style released-button))))) + (ruler-mode-fill-column-face ((t (:box (:color "grey76" :line-width 1 :style released-button) :background "grey76" :stipple nil :inverse-video nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-andale mono" :foreground "red")))) + (ruler-mode-margins-face ((t (:box (:color "grey76" :line-width 1 :style released-button) :foreground "grey64" :stipple nil :inverse-video nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-andale mono" :background "grey64")))) + (ruler-mode-tab-stop-face ((t (:box (:color "grey76" :line-width 1 :style released-button) :background "grey76" :stipple nil :inverse-video nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-andale mono" :foreground "steelblue")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "Aquamarine" :foreground "SlateBlue")))) + (show-paren-match-face ((t (:bold t :background "Aquamarine" :foreground "steel blue" :weight bold)))) + (show-paren-mismatch-face ((t (:background "Red" :foreground "White")))) + (swbuff-current-buffer-face ((t (:bold t :foreground "red" :weight bold)))) + (text-cursor ((t (:background "Red" :foreground "white")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "Arial")))) + (w3m-anchor-face ((t (:bold t :foreground "DodgerBlue1" :weight bold)))) + (w3m-arrived-anchor-face ((t (:bold t :foreground "DodgerBlue3" :weight bold)))) + (w3m-header-line-location-content-face ((t (:background "dark olive green" :foreground "wheat")))) + (w3m-header-line-location-title-face ((t (:background "dark olive green" :foreground "beige")))) + (widget-button-face ((t (:bold t :foreground "green" :weight bold :family "courier")))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:foreground "LightBlue")))) + (widget-inactive-face ((t (:foreground "DimGray")))) + (widget-single-line-field-face ((t (:foreground "LightBlue")))) + (woman-bold-face ((t (:bold t :weight bold :family "Arial")))) + (woman-italic-face ((t (:italic t :foreground "beige" :slant italic :family "Arial")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))) + (zmacs-region ((t (:background "dark cyan" :foreground "cyan"))))))) + +(defun color-theme-comidia () + "Color theme by Marcelo Dias de Toledo, created 2001-12-17. +Steel blue on black." + (interactive) + (color-theme-install + '(color-theme-comidia + ((background-color . "Black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "SteelBlue") + (foreground-color . "SteelBlue") + (mouse-color . "SteelBlue")) + ((display-time-mail-face . mode-line) + (gnus-mouse-face . highlight) + (gnus-summary-selected-face . gnus-summary-selected-face) + (help-highlight-face . underline) + (ispell-highlight-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "Black" :foreground "SteelBlue" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width semi-condensed :family "misc-fixed")))) + (bg:erc-color-face0 ((t (:background "White")))) + (bg:erc-color-face1 ((t (:background "black")))) + (bg:erc-color-face10 ((t (:background "lightblue1")))) + (bg:erc-color-face11 ((t (:background "cyan")))) + (bg:erc-color-face12 ((t (:background "blue")))) + (bg:erc-color-face13 ((t (:background "deeppink")))) + (bg:erc-color-face14 ((t (:background "gray50")))) + (bg:erc-color-face15 ((t (:background "gray90")))) + (bg:erc-color-face2 ((t (:background "blue4")))) + (bg:erc-color-face3 ((t (:background "green4")))) + (bg:erc-color-face4 ((t (:background "red")))) + (bg:erc-color-face5 ((t (:background "brown")))) + (bg:erc-color-face6 ((t (:background "purple")))) + (bg:erc-color-face7 ((t (:background "orange")))) + (bg:erc-color-face8 ((t (:background "yellow")))) + (bg:erc-color-face9 ((t (:background "green")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cursor ((t (:background "SteelBlue")))) + (erc-action-face ((t (:bold t :weight bold)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-dangerous-host-face ((t (:foreground "red")))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "IndianRed")))) + (erc-error-face ((t (:background "Red" :foreground "White")))) + (erc-fool-face ((t (:foreground "dim gray")))) + (erc-input-face ((t (:foreground "brown")))) + (erc-inverse-face ((t (:background "Black" :foreground "White")))) + (erc-keyword-face ((t (:bold t :foreground "pale green" :weight bold)))) + (erc-notice-face ((t (:bold t :foreground "SlateBlue" :weight bold)))) + (erc-pal-face ((t (:bold t :foreground "Magenta" :weight bold)))) + (erc-prompt-face ((t (:bold t :background "lightBlue2" :foreground "Black" :weight bold)))) + (erc-timestamp-face ((t (:bold t :foreground "green" :weight bold)))) + (erc-underline-face ((t (:underline t)))) + (fg:erc-color-face0 ((t (:foreground "White")))) + (fg:erc-color-face1 ((t (:foreground "black")))) + (fg:erc-color-face10 ((t (:foreground "lightblue1")))) + (fg:erc-color-face11 ((t (:foreground "cyan")))) + (fg:erc-color-face12 ((t (:foreground "blue")))) + (fg:erc-color-face13 ((t (:foreground "deeppink")))) + (fg:erc-color-face14 ((t (:foreground "gray50")))) + (fg:erc-color-face15 ((t (:foreground "gray90")))) + (fg:erc-color-face2 ((t (:foreground "blue4")))) + (fg:erc-color-face3 ((t (:foreground "green4")))) + (fg:erc-color-face4 ((t (:foreground "red")))) + (fg:erc-color-face5 ((t (:foreground "brown")))) + (fg:erc-color-face6 ((t (:foreground "purple")))) + (fg:erc-color-face7 ((t (:foreground "orange")))) + (fg:erc-color-face8 ((t (:foreground "yellow")))) + (fg:erc-color-face9 ((t (:foreground "green")))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:foreground "chocolate1")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-doc-face ((t (:foreground "LightSalmon")))) + (font-lock-doc-string-face ((t (:foreground "LightSalmon")))) + (font-lock-function-name-face ((t (:foreground "LightSkyBlue")))) + (font-lock-keyword-face ((t (:foreground "Cyan")))) + (font-lock-preprocessor-face ((t (:foreground "Aquamarine")))) + (font-lock-reference-face ((t (:foreground "LightSteelBlue")))) + (font-lock-string-face ((t (:foreground "LightSalmon")))) + (font-lock-type-face ((t (:foreground "PaleGreen")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink" :weight bold)))) + (fringe ((t (:background "grey10")))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "aquamarine3" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :weight bold)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t :weight bold)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t :weight bold)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise" :weight bold)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "pink" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue" :slant italic)))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen" :slant italic)))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "pink" :slant italic)))) + (gnus-summary-low-unread-face ((t (:italic t :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (header-line ((t (:family "neep" :width condensed :box (:line-width 1 :style none) :background "grey20" :foreground "grey90" :box nil)))) + (highlight ((t (:background "darkolivegreen")))) + (isearch ((t (:background "palevioletred2" :foreground "brown4")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (menu ((t (nil)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "green4" :weight bold)))) + (message-header-name-face ((t (:foreground "DarkGreen")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "#b00000")))) + (message-header-subject-face ((t (:foreground "green3")))) + (message-header-to-face ((t (:bold t :foreground "green2" :weight bold)))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "blue3")))) + (modeline ((t (:background "Gray10" :foreground "SteelBlue" :box (:line-width 1 :style none) :width condensed :family "neep")))) + (modeline-buffer-id ((t (:background "Gray10" :foreground "SteelBlue" :box (:line-width 1 :style none) :width condensed :family "neep")))) + (modeline-mousable-minor-mode ((t (:background "Gray10" :foreground "SteelBlue" :box (:line-width 1 :style none) :width condensed :family "neep")))) + (modeline-mousable ((t (:background "Gray10" :foreground "SteelBlue" :box (:line-width 1 :style none) :width condensed :family "neep")))) + (mouse ((t (:background "SteelBlue")))) + (primary-selection ((t (:background "blue3")))) + (region ((t (:background "blue3")))) + (scroll-bar ((t (:background "grey75")))) + (secondary-selection ((t (:background "SkyBlue4")))) + (speedbar-button-face ((t (:foreground "green3")))) + (speedbar-directory-face ((t (:foreground "light blue")))) + (speedbar-file-face ((t (:foreground "cyan")))) + (speedbar-highlight-face ((t (:background "sea green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray")))) + (zmacs-region ((t (:background "blue3"))))))) + +(defun color-theme-katester () + "Color theme by walterh@rocketmail.com, created 2001-12-12. +A pastelly-mac like color-theme." + (interactive) + (color-theme-standard) + (let ((color-theme-is-cumulative t)) + (color-theme-install + '(color-theme-katester + ((background-color . "ivory") + (cursor-color . "slateblue") + (foreground-color . "black") + (mouse-color . "slateblue")) + (default ((t ((:background "ivory" :foreground "black"))))) + (bold ((t (:bold t)))) + (font-lock-string-face ((t (:foreground "maroon")))) + (font-lock-keyword-face ((t (:foreground "blue")))) + (font-lock-constant-face ((t (:foreground "darkblue")))) + (font-lock-type-face ((t (:foreground "black")))) + (font-lock-variable-name-face ((t (:foreground "black")))) + (font-lock-function-name-face ((t (:bold t :underline t)))) + (font-lock-comment-face ((t (:background "seashell")))) + (highlight ((t (:background "lavender")))) + (italic ((t (:italic t)))) + (modeline ((t (:background "moccasin" :foreground "black")))) + (region ((t (:background "lavender" )))) + (underline ((t (:underline t)))))))) + +(defun color-theme-arjen () + "Color theme by awiersma, created 2001-08-27." + (interactive) + (color-theme-install + '(color-theme-arjen + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "yellow") + (foreground-color . "White") + (mouse-color . "sienna1")) + ((buffers-tab-face . buffers-tab) + (cperl-here-face . font-lock-string-face) + (cperl-invalid-face quote underline) + (cperl-pod-face . font-lock-comment-face) + (cperl-pod-head-face . font-lock-variable-name-face) + (vc-mode-face . highlight)) + (default ((t (:background "black" :foreground "white")))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:bold t)))) + (border-glyph ((t (nil)))) + (buffers-tab ((t (:background "black" :foreground "white")))) + (calendar-today-face ((t (:underline t)))) + (cperl-array-face ((t (:foreground "darkseagreen")))) + (cperl-hash-face ((t (:foreground "darkseagreen")))) + (cperl-nonoverridable-face ((t (:foreground "SkyBlue")))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "light blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "pink")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "lime green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "light blue")))) + (diary-face ((t (:foreground "IndianRed")))) + (erc-action-face ((t (:bold t)))) + (erc-bold-face ((t (:bold t)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "sandybrown")))) + (erc-error-face ((t (:bold t :foreground "IndianRed")))) + (erc-input-face ((t (:foreground "Beige")))) + (erc-inverse-face ((t (:background "wheat" :foreground "darkslategrey")))) + (erc-notice-face ((t (:foreground "MediumAquamarine")))) + (erc-pal-face ((t (:foreground "pale green")))) + (erc-prompt-face ((t (:foreground "MediumAquamarine")))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :foreground "IndianRed")))) + (eshell-ls-backup-face ((t (:foreground "Grey")))) + (eshell-ls-clutter-face ((t (:foreground "DimGray")))) + (eshell-ls-directory-face ((t (:bold t :foreground "MediumSlateBlue")))) + (eshell-ls-executable-face ((t (:foreground "Coral")))) + (eshell-ls-missing-face ((t (:foreground "black")))) + (eshell-ls-picture-face ((t (:foreground "Violet")))) + (eshell-ls-product-face ((t (:foreground "sandybrown")))) + (eshell-ls-readonly-face ((t (:foreground "Aquamarine")))) + (eshell-ls-special-face ((t (:foreground "Gold")))) + (eshell-ls-symlink-face ((t (:foreground "White")))) + (eshell-ls-unreadable-face ((t (:foreground "DimGray")))) + (eshell-prompt-face ((t (:foreground "MediumAquamarine")))) + (fl-comment-face ((t (:foreground "pink")))) + (fl-doc-string-face ((t (:foreground "purple")))) + (fl-function-name-face ((t (:foreground "red")))) + (fl-keyword-face ((t (:foreground "cadetblue")))) + (fl-string-face ((t (:foreground "green")))) + (fl-type-face ((t (:foreground "yellow")))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:foreground "IndianRed")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-doc-string-face ((t (:foreground "DarkOrange")))) + (font-lock-function-name-face ((t (:foreground "YellowGreen")))) + (font-lock-keyword-face ((t (:foreground "PaleYellow")))) + (font-lock-preprocessor-face ((t (:foreground "Aquamarine")))) + (font-lock-reference-face ((t (:foreground "SlateBlue")))) + (font-lock-string-face ((t (:foreground "Orange")))) + (font-lock-type-face ((t (:foreground "Green")))) + (font-lock-variable-name-face ((t (:foreground "darkseagreen")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink")))) + (qt-classes-face ((t (:foreground "Red")))) + (gnus-cite-attribution-face ((t (nil)))) + (gnus-cite-face-1 ((t (:bold nil :foreground "deep sky blue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:bold nil :foreground "cadetblue")))) + (gnus-cite-face-3 ((t (:bold nil :foreground "gold")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:bold nil :foreground "chocolate")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold nil)))) + (gnus-emphasis-bold-italic ((t (:bold nil)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (nil)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold nil)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :bold nil)))) + (gnus-emphasis-underline-italic ((t (:underline t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold nil :foreground "aquamarine1")))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold nil :foreground "aquamarine2")))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold nil :foreground "aquamarine3")))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold nil :foreground "aquamarine4")))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold nil :foreground "PaleTurquoise")))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold nil :foreground "turquoise")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold nil)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold nil)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold nil)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold nil)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold nil :foreground "DarkTurquoise")))) + (gnus-header-content-face ((t (:foreground "forest green")))) + (gnus-header-from-face ((t (:bold nil :foreground "spring green")))) + (gnus-header-name-face ((t (:foreground "deep sky blue")))) + (gnus-header-newsgroups-face ((t (:bold nil :foreground "purple")))) + (gnus-header-subject-face ((t (:bold nil :foreground "orange")))) + (gnus-signature-face ((t (:bold nil :foreground "khaki")))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold nil :foreground "SkyBlue")))) + (gnus-summary-high-read-face ((t (:bold nil :foreground "PaleGreen")))) + (gnus-summary-high-ticked-face ((t (:bold nil :foreground "pink")))) + (gnus-summary-high-unread-face ((t (:bold nil)))) + (gnus-summary-low-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-low-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-low-ticked-face ((t (:foreground "pink")))) + (gnus-summary-low-unread-face ((t (nil)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:background "#D4D0C8" :foreground "black")))) + (highlight ((t (:background "darkolivegreen")))) + (highline-face ((t (:background "SeaGreen")))) + (holiday-face ((t (:background "DimGray")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:underline t :bold t :foreground "DodgerBlue1")))) + (info-xref ((t (:underline t :foreground "DodgerBlue1")))) + (isearch ((t (:background "blue")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (nil)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68" :foreground "white")))) + (message-cited-text-face ((t (:bold t :foreground "green")))) + (message-header-cc-face ((t (:bold t :foreground "green4")))) + (message-header-name-face ((t (:bold t :foreground "orange")))) + (message-header-newsgroups-face ((t (:bold t :foreground "violet")))) + (message-header-other-face ((t (:bold t :foreground "chocolate")))) + (message-header-subject-face ((t (:bold t :foreground "yellow")))) + (message-header-to-face ((t (:bold t :foreground "cadetblue")))) + (message-header-xheader-face ((t (:bold t :foreground "light blue")))) + (message-mml-face ((t (:bold t :foreground "Green3")))) + (message-separator-face ((t (:foreground "blue3")))) + (modeline ((t (:background "DarkRed" :foreground "white" :box (:line-width 1 :style released-button))))) + (modeline-buffer-id ((t (:background "DarkRed" :foreground "white")))) + (modeline-mousable ((t (:background "DarkRed" :foreground "white")))) + (modeline-mousable-minor-mode ((t (:background "DarkRed" :foreground "white")))) + (p4-depot-added-face ((t (:foreground "blue")))) + (p4-depot-deleted-face ((t (:foreground "red")))) + (p4-depot-unmapped-face ((t (:foreground "grey30")))) + (p4-diff-change-face ((t (:foreground "dark green")))) + (p4-diff-del-face ((t (:foreground "red")))) + (p4-diff-file-face ((t (:background "gray90")))) + (p4-diff-head-face ((t (:background "gray95")))) + (p4-diff-ins-face ((t (:foreground "blue")))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "blue")))) + (red ((t (:foreground "red")))) + (region ((t (:background "blue")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "darkslateblue")))) + (show-paren-match-face ((t (:background "Aquamarine" :foreground "SlateBlue")))) + (show-paren-mismatch-face ((t (:background "Red" :foreground "White")))) + (text-cursor ((t (:background "yellow" :foreground "black")))) + (toolbar ((t (nil)))) + (underline ((nil (:underline nil)))) + (vertical-divider ((t (nil)))) + (widget ((t (nil)))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray")))) + (woman-bold-face ((t (:bold t)))) + (woman-italic-face ((t (:foreground "beige")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "snow" :foreground "blue"))))))) + +(defun color-theme-tty-dark () + "Color theme by Oivvio Polite, created 2002-02-01. Good for tty display." + (interactive) + (color-theme-install + '(color-theme-tty-dark + ((background-color . "black") + (background-mode . dark) + (border-color . "blue") + (cursor-color . "red") + (foreground-color . "white") + (mouse-color . "black")) + ((ispell-highlight-face . highlight) + (list-matching-lines-face . bold) + (tinyreplace-:face . highlight) + (view-highlight-face . highlight)) + (default ((t (nil)))) + (bold ((t (:underline t :background "black" :foreground "white")))) + (bold-italic ((t (:underline t :foreground "white")))) + (calendar-today-face ((t (:underline t)))) + (diary-face ((t (:foreground "red")))) + (font-lock-builtin-face ((t (:foreground "blue")))) + (font-lock-comment-face ((t (:foreground "cyan")))) + (font-lock-constant-face ((t (:foreground "magenta")))) + (font-lock-function-name-face ((t (:foreground "cyan")))) + (font-lock-keyword-face ((t (:foreground "red")))) + (font-lock-string-face ((t (:foreground "green")))) + (font-lock-type-face ((t (:foreground "yellow")))) + (font-lock-variable-name-face ((t (:foreground "blue")))) + (font-lock-warning-face ((t (:bold t :foreground "magenta")))) + (highlight ((t (:background "blue" :foreground "yellow")))) + (holiday-face ((t (:background "cyan")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (italic ((t (:underline t :background "red")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "green")))) + (message-header-name-face ((t (:foreground "green")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow")))) + (message-header-other-face ((t (:foreground "#b00000")))) + (message-header-subject-face ((t (:foreground "green")))) + (message-header-to-face ((t (:bold t :foreground "green")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "green")))) + (message-separator-face ((t (:foreground "blue")))) + + (modeline ((t (:background "white" :foreground "blue")))) + (modeline-buffer-id ((t (:background "white" :foreground "red")))) + (modeline-mousable ((t (:background "white" :foreground "magenta")))) + (modeline-mousable-minor-mode ((t (:background "white" :foreground "yellow")))) + (region ((t (:background "white" :foreground "black")))) + (zmacs-region ((t (:background "cyan" :foreground "black")))) + (secondary-selection ((t (:background "blue")))) + (show-paren-match-face ((t (:background "red")))) + (show-paren-mismatch-face ((t (:background "magenta" :foreground "white")))) + (underline ((t (:underline t))))))) + +(defun color-theme-aliceblue () + "Color theme by Girish Bharadwaj, created 2002-03-27. +Includes comint prompt, custom, font-lock, isearch, +jde, senator, speedbar, and widget." + (interactive) + (color-theme-install + '(color-theme-aliceblue + ((background-color . "AliceBlue") + (background-mode . light) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "DarkSlateGray4") + (mouse-color . "black")) + ((help-highlight-face . underline) + (list-matching-lines-face . bold) + (semantic-which-function-use-color . t) + (senator-eldoc-use-color . t) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "AliceBlue" :foreground "DarkSlateGray4" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-courier new")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "dark blue")))) + (cursor ((t (:background "black")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "gray85")))) + (custom-comment-tag-face ((t (:foreground "blue4")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:bold t :foreground "blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "red" :weight bold :height 1.2)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "blue" :weight bold :height 1.2)))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:italic t :foreground "Firebrick" :slant oblique)))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-function-name-face ((t (:bold t :foreground "Blue" :weight extra-bold :family "outline-verdana")))) + (font-lock-keyword-face ((t (:bold t :foreground "Purple" :weight semi-bold :family "outline-verdana")))) + (font-lock-preprocessor-face ((t (:foreground "CadetBlue")))) + (font-lock-reference-face ((t (:foreground "Orchid")))) + (font-lock-string-face ((t (:foreground "RosyBrown")))) + (font-lock-type-face ((t (:italic t :foreground "ForestGreen" :slant italic)))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod" :width condensed)))) + (font-lock-warning-face ((t (:bold t :foreground "Red" :weight bold)))) + (fringe ((t (:background "DarkSlateBlue")))) + (header-line ((t (:box (:line-width -1 :style released-button) :background "grey90" :foreground "grey20" :box nil)))) + (highlight ((t (:background "darkseagreen2")))) + (isearch ((t (:background "magenta4" :foreground "lightskyblue1")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise")))) + (italic ((t (:italic t :slant italic)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-db-active-breakpoint-face ((t (:background "red" :foreground "black")))) + (jde-db-requested-breakpoint-face ((t (:background "yellow" :foreground "black")))) + (jde-db-spec-breakpoint-face ((t (:background "green" :foreground "black")))) + (jde-java-font-lock-api-face ((t (:foreground "dark goldenrod")))) + (jde-java-font-lock-bold-face ((t (:bold t :weight bold)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "CadetBlue")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "green4")))) + (jde-java-font-lock-italic-face ((t (:italic t :slant italic)))) + (jde-java-font-lock-link-face ((t (:foreground "blue" :underline t :slant normal)))) + (jde-java-font-lock-modifier-face ((t (:foreground "Orchid")))) + (jde-java-font-lock-number-face ((t (:foreground "RosyBrown")))) + (jde-java-font-lock-operator-face ((t (:foreground "medium blue")))) + (jde-java-font-lock-package-face ((t (:foreground "blue3")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (menu ((t (nil)))) + (modeline ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (modeline-buffer-id ((t (:background "grey75" :foreground "black")))) + (modeline-mousable ((t (:background "grey75" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "grey75" :foreground "black")))) + (mouse ((t (:background "black")))) + (primary-selection ((t (:background "lightgoldenrod2")))) + (region ((t (:background "lightgoldenrod2")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "yellow")))) + (semantic-dirty-token-face ((t (:background "lightyellow")))) + (semantic-unmatched-syntax-face ((t (:underline "red")))) + (senator-intangible-face ((t (:foreground "gray25")))) + (senator-momentary-highlight-face ((t (:background "gray70")))) + (senator-read-only-face ((t (:background "#CCBBBB")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "brown")))) + (template-message-face ((t (:bold t :weight bold)))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (zmacs-region ((t (:background "lightgoldenrod2"))))))) + +(defun color-theme-black-on-gray () + "Color theme by sbhojwani, created 2002-04-03. +Includes ecb, font-lock, paren, semantic, and widget faces. +Some of the font-lock faces are disabled, ie. they look just +like the default face. This is for people that don't like +the look of \"angry fruit salad\" when editing." + (interactive) + (color-theme-install + '(color-theme-black-on-gray + ((background-color . "white") + (background-mode . light) + (border-color . "blue") + (foreground-color . "black")) + ((buffers-tab-face . buffers-tab) + (ecb-directories-general-face . ecb-default-general-face) + (ecb-directory-face . ecb-default-highlight-face) + (ecb-history-face . ecb-default-highlight-face) + (ecb-history-general-face . ecb-default-general-face) + (ecb-method-face . ecb-default-highlight-face) + (ecb-methods-general-face . ecb-default-general-face) + (ecb-source-face . ecb-default-highlight-face) + (ecb-source-in-directories-buffer-face . ecb-source-in-directories-buffer-face) + (ecb-sources-general-face . ecb-default-general-face) + (ecb-token-header-face . ecb-token-header-face)) + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t :size "10pt")))) + (bold-italic ((t (:italic t :bold t :size "10pt")))) + (border-glyph ((t (:size "11pt")))) + (buffers-tab ((t (:background "gray75")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (ecb-bucket-token-face ((t (:bold t :size "10pt")))) + (ecb-default-general-face ((t (nil)))) + (ecb-default-highlight-face ((t (:background "cornflower blue" :foreground "yellow")))) + (ecb-directories-general-face ((t (nil)))) + (ecb-directory-face ((t (:background "cornflower blue" :foreground "yellow")))) + (ecb-history-face ((t (:background "cornflower blue" :foreground "yellow")))) + (ecb-history-general-face ((t (nil)))) + (ecb-method-face ((t (:background "cornflower blue" :foreground "yellow")))) + (ecb-methods-general-face ((t (nil)))) + (ecb-source-face ((t (:background "cornflower blue" :foreground "yellow")))) + (ecb-source-in-directories-buffer-face ((t (:foreground "medium blue")))) + (ecb-sources-general-face ((t (nil)))) + (ecb-token-header-face ((t (:background "SeaGreen1")))) + (ecb-type-token-class-face ((t (:bold t :size "10pt")))) + (ecb-type-token-enum-face ((t (:bold t :size "10pt")))) + (ecb-type-token-group-face ((t (:bold t :size "10pt" :foreground "dimgray")))) + (ecb-type-token-interface-face ((t (:bold t :size "10pt")))) + (ecb-type-token-struct-face ((t (:bold t :size "10pt")))) + (ecb-type-token-typedef-face ((t (:bold t :size "10pt")))) + (font-lock-builtin-face ((t (:foreground "red3")))) + (font-lock-constant-face ((t (:foreground "blue3")))) + (font-lock-comment-face ((t (:foreground "blue")))) + (font-lock-doc-face ((t (:foreground "green4")))) + (font-lock-doc-string-face ((t (:foreground "green4")))) + (font-lock-function-name-face ((t (nil)))) + (font-lock-keyword-face ((t (nil)))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (nil)))) + (font-lock-type-face ((t (nil)))) + (font-lock-variable-name-face ((t (nil)))) + (font-lock-warning-face ((t (nil)))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75")))) + (gui-element ((t (:size "8pt" :background "gray75")))) + (highlight ((t (:background "darkseagreen2")))) + (isearch ((t (:background "paleturquoise")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (:size "10pt")))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68")))) + (modeline ((t (:background "gray75")))) + (modeline-buffer-id ((t (:background "gray75" :foreground "blue4")))) + (modeline-mousable ((t (:background "gray75" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "gray75" :foreground "green4")))) + (paren-blink-off ((t (:foreground "gray")))) + (paren-match ((t (:background "darkseagreen2")))) + (paren-mismatch ((t (nil)))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "gray65")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (semantic-dirty-token-face ((t (nil)))) + (semantic-unmatched-syntax-face ((t (nil)))) + (text-cursor ((t (:background "red" :foreground "gray")))) + (toolbar ((t (:background "gray75")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (:background "gray75")))) + (widget ((t (:size "8pt" :background "gray75")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (nil)))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "gray65"))))))) + +(defun color-theme-dark-blue2 () + "Color theme by Chris McMahan, created 2002-04-12. +Includes antlr, bbdb, change-log, comint, cperl, custom cvs, diff, +dired, display-time, ebrowse, ecb, ediff, erc, eshell, fl, font-lock, +gnus, hi, highlight, html-helper, hyper-apropos, info, isearch, jde, +message, mmm, paren, semantic, senator, sgml, smerge, speedbar, +strokes, term, vhdl, viper, vm, widget, xref, xsl, xxml. Yes, it is +a large theme." + (interactive) + (color-theme-install + '(color-theme-dark-blue2 + ((background-color . "#233b5a") + (background-mode . dark) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "black") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (cursor-color . "Yellow") + (foreground-color . "#fff8dc") + (mouse-color . "Grey") + (top-toolbar-shadow-color . "#fffffbeeffff") + (viper-saved-cursor-color-in-replace-mode . "Red3")) + ((blank-space-face . blank-space-face) + (blank-tab-face . blank-tab-face) + (cperl-invalid-face . underline) + (ecb-directories-general-face . ecb-directories-general-face) + (ecb-directory-face . ecb-directory-face) + (ecb-history-face . ecb-history-face) + (ecb-history-general-face . ecb-history-general-face) + (ecb-method-face . ecb-method-face) + (ecb-methods-general-face . ecb-methods-general-face) + (ecb-source-face . ecb-source-face) + (ecb-source-in-directories-buffer-face . ecb-sources-face) + (ecb-sources-general-face . ecb-sources-general-face) + (ecb-token-header-face . ecb-token-header-face) + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-cite-attribution-face . gnus-cite-attribution-face) + (gnus-signature-face . gnus-signature-face) + (gnus-summary-selected-face . gnus-summary-selected-face) + (help-highlight-face . underline) + (highline-face . highline-face) + (highline-vertical-face . highline-vertical-face) + (list-matching-lines-face . bold) + (ps-zebra-color . 0.95) + (senator-eldoc-use-color . t) + (sgml-set-face . t) + (tags-tag-face . default) + (view-highlight-face . highlight) + (vm-highlight-url-face . bold-italic) + (vm-highlighted-header-face . bold) + (vm-mime-button-face . gui-button-face) + (vm-summary-highlight-face . bold) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "#233b5a" :foreground "#fff8dc" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-lucida console")))) + (Info-title-1-face ((t (:bold t :weight bold :height 1.728 :family "helv")))) + (Info-title-2-face ((t (:bold t :weight bold :height 1.44 :family "helv")))) + (Info-title-3-face ((t (:bold t :weight bold :height 1.2 :family "helv")))) + (Info-title-4-face ((t (:bold t :weight bold :family "helv")))) + (antlr-font-lock-keyword-face ((t (:bold t :foreground "Gray85" :weight bold)))) + (antlr-font-lock-literal-face ((t (:bold t :foreground "Gray85" :weight bold)))) + (antlr-font-lock-ruledef-face ((t (:bold t :foreground "Gray85" :weight bold)))) + (antlr-font-lock-ruleref-face ((t (:foreground "Gray85")))) + (antlr-font-lock-tokendef-face ((t (:bold t :foreground "Gray85" :weight bold)))) + (antlr-font-lock-tokenref-face ((t (:foreground "Gray85")))) + (bbdb-company ((t (:italic t :slant italic)))) + (bbdb-field-name ((t (:bold t :weight bold)))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (:underline t)))) + (bg:erc-color-face0 ((t (:background "White")))) + (bg:erc-color-face1 ((t (:background "black")))) + (bg:erc-color-face10 ((t (:background "lightblue1")))) + (bg:erc-color-face11 ((t (:background "cyan")))) + (bg:erc-color-face12 ((t (:background "blue")))) + (bg:erc-color-face13 ((t (:background "deeppink")))) + (bg:erc-color-face14 ((t (:background "gray50")))) + (bg:erc-color-face15 ((t (:background "gray90")))) + (bg:erc-color-face2 ((t (:background "blue4")))) + (bg:erc-color-face3 ((t (:background "green4")))) + (bg:erc-color-face4 ((t (:background "red")))) + (bg:erc-color-face5 ((t (:background "brown")))) + (bg:erc-color-face6 ((t (:background "purple")))) + (bg:erc-color-face7 ((t (:background "orange")))) + (bg:erc-color-face8 ((t (:background "yellow")))) + (bg:erc-color-face9 ((t (:background "green")))) + (blank-space-face ((t (:background "LightGray")))) + (blank-tab-face ((t (:background "Wheat")))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t :foreground "cyan" :weight bold)))) + (bold-italic ((t (:italic t :bold t :foreground "cyan2" :slant italic :weight bold)))) + (border ((t (:background "black")))) + (border-glyph ((t (nil)))) + (buffers-tab ((t (:background "gray30" :foreground "LightSkyBlue")))) + (calendar-today-face ((t (:underline t)))) + (change-log-acknowledgement-face ((t (:foreground "firebrick")))) + (change-log-conditionals-face ((t (:background "sienna" :foreground "khaki")))) + (change-log-date-face ((t (:foreground "gold")))) + (change-log-email-face ((t (:foreground "khaki" :underline t)))) + (change-log-file-face ((t (:bold t :foreground "lemon chiffon" :weight bold)))) + (change-log-function-face ((t (:background "sienna" :foreground "khaki")))) + (change-log-list-face ((t (:foreground "wheat")))) + (change-log-name-face ((t (:bold t :foreground "light goldenrod" :weight bold)))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (comint-input-face ((t (:foreground "deepskyblue")))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue" :weight bold)))) + (cperl-hash-face ((t (:italic t :bold t :background "lightyellow2" :foreground "Red" :slant italic :weight bold)))) + (cperl-invalid-face ((t (:foreground "white")))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (cursor ((t (:background "Yellow")))) + (custom-button-face ((t (:bold t :weight bold)))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "gray30")))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:foreground "white")))) + (custom-comment-tag-face ((t (:foreground "white")))) + (custom-documentation-face ((t (:foreground "light blue")))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:bold t :foreground "gray85" :underline t :weight bold)))) + (custom-group-tag-face-1 ((t (:foreground "gray85" :underline t)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "gray30" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "gray85")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :foreground "gray85" :underline t :weight bold)))) + (cvs-filename-face ((t (:foreground "white")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:foreground "green")))) + (cvs-marked-face ((t (:bold t :foreground "green3" :weight bold)))) + (cvs-msg-face ((t (:foreground "gray85")))) + (cvs-need-action-face ((t (:foreground "yellow")))) + (cvs-unknown-face ((t (:foreground "grey")))) + (cyan ((t (:foreground "cyan")))) + (diary-face ((t (:bold t :foreground "gray85" :weight bold)))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (:foreground "grey50")))) + (diff-file-header-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-function-face ((t (:foreground "grey50")))) + (diff-header-face ((t (:foreground "lemon chiffon")))) + (diff-hunk-header-face ((t (:background "grey85")))) + (diff-index-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-nonexistent-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-removed-face ((t (nil)))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t :weight bold)))) + (dired-face-executable ((t (:foreground "gray85")))) + (dired-face-flagged ((t (:background "LightSlateGray")))) + (dired-face-header ((t (:background "grey75" :foreground "gray30")))) + (dired-face-marked ((t (:background "PaleVioletRed")))) + (dired-face-permissions ((t (:background "grey75" :foreground "gray30")))) + (dired-face-setuid ((t (:foreground "gray85")))) + (dired-face-socket ((t (:foreground "gray85")))) + (dired-face-symlink ((t (:foreground "cyan")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "gray85")))) + (ebrowse-default-face ((t (nil)))) + (ebrowse-file-name-face ((t (:italic t :slant italic)))) + (ebrowse-member-attribute-face ((t (:foreground "red")))) + (ebrowse-member-class-face ((t (:foreground "Gray85")))) + (ebrowse-progress-face ((t (:background "blue")))) + (ebrowse-root-class-face ((t (:bold t :foreground "Gray85" :weight bold)))) + (ebrowse-tree-mark-face ((t (:foreground "Gray85")))) + (ecb-bucket-token-face ((t (:bold t :weight bold)))) + (ecb-default-general-face ((t (:height 1.0)))) + (ecb-default-highlight-face ((t (:background "magenta" :height 1.0)))) + (ecb-directories-general-face ((t (:height 0.9)))) + (ecb-directory-face ((t (:background "Cyan4")))) + (ecb-history-face ((t (:background "Cyan4")))) + (ecb-history-general-face ((t (:height 0.9)))) + (ecb-method-face ((t (:background "Cyan4" :slant normal :weight normal)))) + (ecb-methods-general-face ((t (:slant normal)))) + (ecb-source-face ((t (:background "Cyan4")))) + (ecb-source-in-directories-buffer-face ((t (:foreground "LightBlue1")))) + (ecb-sources-face ((t (:foreground "LightBlue1")))) + (ecb-sources-general-face ((t (:height 0.9)))) + (ecb-token-header-face ((t (:background "Steelblue4")))) + (ecb-type-token-class-face ((t (:bold t :weight bold)))) + (ecb-type-token-enum-face ((t (:bold t :weight bold)))) + (ecb-type-token-group-face ((t (:bold t :foreground "dim gray" :weight bold)))) + (ecb-type-token-interface-face ((t (:bold t :weight bold)))) + (ecb-type-token-struct-face ((t (:bold t :weight bold)))) + (ecb-type-token-typedef-face ((t (:bold t :weight bold)))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Gray30")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Gray30")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Gray30")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Gray30")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Gray30")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Gray30")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Gray30")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Gray30")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (erc-action-face ((t (:bold t :weight bold)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-dangerous-host-face ((t (:foreground "red")))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "pale green")))) + (erc-error-face ((t (:bold t :foreground "gray85" :weight bold)))) + (erc-fool-face ((t (:foreground "Gray85")))) + (erc-highlight-face ((t (:bold t :foreground "pale green" :weight bold)))) + (erc-input-face ((t (:foreground "light blue")))) + (erc-inverse-face ((t (:background "Black" :foreground "White")))) + (erc-keyword-face ((t (:bold t :foreground "pale green" :weight bold)))) + (erc-notice-face ((t (:foreground "light salmon")))) + (erc-pal-face ((t (:foreground "pale green")))) + (erc-prompt-face ((t (:bold t :foreground "light blue" :weight bold)))) + (erc-timestamp-face ((t (:bold t :foreground "green" :weight bold)))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :weight bold)))) + (eshell-ls-backup-face ((t (:foreground "gray85")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "gray85" :weight bold)))) + (eshell-ls-directory-face ((t (:bold t :foreground "Cyan" :weight bold)))) + (eshell-ls-executable-face ((t (:bold t :weight bold)))) + (eshell-ls-missing-face ((t (:bold t :weight bold)))) + (eshell-ls-picture-face ((t (:foreground "gray85")))) + (eshell-ls-product-face ((t (:foreground "gray85")))) + (eshell-ls-readonly-face ((t (:foreground "gray70")))) + (eshell-ls-special-face ((t (:bold t :weight bold)))) + (eshell-ls-symlink-face ((t (:bold t :weight bold)))) + (eshell-ls-text-face ((t (:foreground "gray85")))) + (eshell-ls-todo-face ((t (:bold t :weight bold)))) + (eshell-ls-unreadable-face ((t (:foreground "gray85")))) + (eshell-prompt-face ((t (:bold t :foreground "Yellow" :weight bold)))) + (eshell-test-failed-face ((t (:bold t :weight bold)))) + (eshell-test-ok-face ((t (:bold t :weight bold)))) + (excerpt ((t (:italic t :slant italic)))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "gray85" :weight bold)))) + (fg:black ((t (:foreground "black")))) + (fg:erc-color-face0 ((t (:foreground "White")))) + (fg:erc-color-face1 ((t (:foreground "black")))) + (fg:erc-color-face10 ((t (:foreground "lightblue1")))) + (fg:erc-color-face11 ((t (:foreground "cyan")))) + (fg:erc-color-face12 ((t (:foreground "blue")))) + (fg:erc-color-face13 ((t (:foreground "deeppink")))) + (fg:erc-color-face14 ((t (:foreground "gray50")))) + (fg:erc-color-face15 ((t (:foreground "gray90")))) + (fg:erc-color-face2 ((t (:foreground "blue4")))) + (fg:erc-color-face3 ((t (:foreground "green4")))) + (fg:erc-color-face4 ((t (:foreground "red")))) + (fg:erc-color-face5 ((t (:foreground "brown")))) + (fg:erc-color-face6 ((t (:foreground "purple")))) + (fg:erc-color-face7 ((t (:foreground "orange")))) + (fg:erc-color-face8 ((t (:foreground "yellow")))) + (fg:erc-color-face9 ((t (:foreground "green")))) + (fixed ((t (:bold t :weight bold)))) + (fixed-pitch ((t (:family "outline-lucida console")))) + (fl-comment-face ((t (:foreground "gray85")))) + (fl-function-name-face ((t (:foreground "green")))) + (fl-keyword-face ((t (:foreground "LightGreen")))) + (fl-string-face ((t (:foreground "light coral")))) + (fl-type-face ((t (:foreground "cyan")))) + (flyspell-duplicate-face ((t (:bold t :foreground "Gold3" :underline t :weight bold)))) + (flyspell-incorrect-face ((t (:bold t :foreground "OrangeRed" :underline t :weight bold)))) + (font-latex-bold-face ((t (nil)))) + (font-latex-italic-face ((t (nil)))) + (font-latex-math-face ((t (nil)))) + (font-latex-sedate-face ((t (:foreground "Gray85")))) + (font-latex-string-face ((t (:foreground "orange")))) + (font-latex-warning-face ((t (:foreground "gold")))) + (font-lock-builtin-face ((t (:bold t :foreground "LightSteelBlue" :weight bold)))) + (font-lock-comment-face ((t (:italic t :foreground "medium aquamarine" :slant italic)))) + (font-lock-constant-face ((t (:bold t :foreground "Aquamarine" :weight bold)))) + (font-lock-doc-face ((t (:bold t :weight bold)))) + (font-lock-doc-string-face ((t (:bold t :foreground "aquamarine" :weight bold)))) + (font-lock-exit-face ((t (:foreground "green")))) + (font-lock-function-name-face ((t (:italic t :bold t :foreground "LightSkyBlue" :slant italic :weight bold)))) + (font-lock-keyword-face ((t (:bold t :foreground "Cyan" :weight bold)))) + (font-lock-preprocessor-face ((t (:foreground "Gray85")))) + (font-lock-reference-face ((t (:foreground "cyan")))) + (font-lock-string-face ((t (:italic t :foreground "aquamarine" :slant italic)))) + (font-lock-type-face ((t (:bold t :foreground "PaleGreen" :weight bold)))) + (font-lock-variable-name-face ((t (:italic t :bold t :foreground "LightGoldenrod" :slant italic :weight bold)))) + (font-lock-warning-face ((t (:bold t :foreground "Salmon" :weight bold)))) + (fringe ((t (:background "#3c5473")))) + (gnus-cite-attribution-face ((t (:italic t :bold t :foreground "beige" :underline t :slant italic :weight bold)))) + (gnus-cite-face-1 ((t (:foreground "gold")))) + (gnus-cite-face-10 ((t (:foreground "coral")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "wheat")))) + (gnus-cite-face-3 ((t (:foreground "light pink")))) + (gnus-cite-face-4 ((t (:foreground "khaki")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :foreground "light gray" :weight bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :foreground "cyan" :slant italic :weight bold)))) + (gnus-emphasis-highlight-words ((t (:background "gray30" :foreground "gold")))) + (gnus-emphasis-italic ((t (:italic t :foreground "cyan" :slant italic)))) + (gnus-emphasis-underline ((t (:foreground "white" :underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :foreground "white" :underline t :weight bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :foreground "white" :underline t :slant italic :weight bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :foreground "white" :underline t :slant italic)))) + (gnus-filterhist-face-1 ((t (nil)))) + (gnus-group-mail-1-empty-face ((t (:foreground "Magenta")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "Magenta" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "Cyan")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "Cyan" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "Wheat")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "Gray85" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (gnus-group-news-3-empty-face ((t (:foreground "wheat")))) + (gnus-group-news-3-face ((t (:bold t :foreground "Wheat" :weight bold)))) + (gnus-group-news-4-empty-face ((t (:foreground "Aquamarine")))) + (gnus-group-news-4-face ((t (:bold t :weight bold)))) + (gnus-group-news-5-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-5-face ((t (:bold t :weight bold)))) + (gnus-group-news-6-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-6-face ((t (:bold t :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-low-face ((t (:bold t :foreground "MediumAquamarine" :weight bold)))) + (gnus-header-content-face ((t (:italic t :foreground "Wheat" :slant italic)))) + (gnus-header-from-face ((t (:bold t :foreground "light yellow" :weight bold)))) + (gnus-header-name-face ((t (:bold t :foreground "Wheat" :weight bold)))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "gold" :slant italic :weight bold)))) + (gnus-header-subject-face ((t (:bold t :foreground "Gold" :weight bold)))) + (gnus-picons-face ((t (:background "white" :foreground "gray30")))) + (gnus-picons-xbm-face ((t (:background "white" :foreground "gray30")))) + (gnus-signature-face ((t (:italic t :foreground "white" :slant italic)))) + (gnus-splash ((t (:foreground "Brown")))) + (gnus-splash-face ((t (:foreground "orange")))) + (gnus-summary-cancelled-face ((t (:background "gray30" :foreground "orange")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "gray85" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "coral" :weight bold)))) + (gnus-summary-high-unread-face ((t (:italic t :bold t :foreground "gold" :slant italic :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue" :slant italic)))) + (gnus-summary-low-read-face ((t (:italic t :foreground "gray85" :slant italic)))) + (gnus-summary-low-ticked-face ((t (:italic t :bold t :foreground "coral" :slant italic :weight bold)))) + (gnus-summary-low-unread-face ((t (:italic t :foreground "white" :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "gray70")))) + (gnus-summary-normal-ticked-face ((t (:bold t :foreground "pink" :weight bold)))) + (gnus-summary-normal-unread-face ((t (:bold t :foreground "gray85" :weight bold)))) + (gnus-summary-selected-face ((t (:foreground "white" :underline t)))) + (gnus-x-face ((t (:background "white" :foreground "gray30")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "gray30")))) + (gui-element ((t (:background "Gray80")))) + (header-line ((t (:background "grey20" :foreground "grey90")))) + (hi-black-b ((t (:bold t :weight bold)))) + (hi-black-hb ((t (:bold t :weight bold :height 1.67 :family "helv")))) + (hi-blue ((t (:background "light blue")))) + (hi-blue-b ((t (:bold t :foreground "blue" :weight bold)))) + (hi-green ((t (:background "green")))) + (hi-green-b ((t (:bold t :foreground "green" :weight bold)))) + (hi-pink ((t (:background "pink")))) + (hi-red-b ((t (:bold t :foreground "red" :weight bold)))) + (hi-yellow ((t (:background "yellow")))) + (highlight ((t (:background "SkyBlue3")))) + (highlight-changes-delete-face ((t (:foreground "gray85" :underline t)))) + (highlight-changes-face ((t (:foreground "gray85")))) + (highline-face ((t (:background "#3c5473")))) + (highline-vertical-face ((t (:background "lightcyan")))) + (holiday-face ((t (:background "pink" :foreground "gray30")))) + (html-helper-bold-face ((t (:bold t :weight bold)))) + (html-helper-bold-italic-face ((t (nil)))) + (html-helper-builtin-face ((t (:foreground "gray85" :underline t)))) + (html-helper-italic-face ((t (:bold t :foreground "yellow" :weight bold)))) + (html-helper-underline-face ((t (:underline t)))) + (html-tag-face ((t (:bold t :weight bold)))) + (hyper-apropos-documentation ((t (:foreground "white")))) + (hyper-apropos-heading ((t (:bold t :weight bold)))) + (hyper-apropos-hyperlink ((t (:foreground "sky blue")))) + (hyper-apropos-major-heading ((t (:bold t :weight bold)))) + (hyper-apropos-section-heading ((t (:bold t :weight bold)))) + (hyper-apropos-warning ((t (:bold t :foreground "gray85" :weight bold)))) + (ibuffer-marked-face ((t (:foreground "gray85")))) + (idlwave-help-link-face ((t (:foreground "Blue")))) + (idlwave-shell-bp-face ((t (:background "Pink" :foreground "Black")))) + (info-header-node ((t (:italic t :bold t :foreground "brown" :slant italic :weight bold)))) + (info-header-xref ((t (:bold t :foreground "magenta4" :weight bold)))) + (info-menu-5 ((t (:underline t)))) + (info-menu-6 ((t (nil)))) + (info-menu-header ((t (:bold t :weight bold :family "helv")))) + (info-node ((t (:italic t :bold t :slant italic :weight bold)))) + (info-xref ((t (:bold t :weight bold)))) + (isearch ((t (:background "LightSeaGreen")))) + (isearch-lazy-highlight-face ((t (:background "cyan4")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (:italic t :bold t :slant italic :weight bold)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-bug-breakpoint-marker ((t (:background "yellow" :foreground "red")))) + (jde-java-font-lock-api-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-bold-face ((t (:bold t :weight bold)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-italic-face ((t (:italic t :slant italic)))) + (jde-java-font-lock-link-face ((t (:foreground "cyan3" :underline t)))) + (jde-java-font-lock-modifier-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-number-face ((t (:foreground "RosyBrown")))) + (jde-java-font-lock-operator-face ((t (:foreground "cyan3")))) + (jde-java-font-lock-package-face ((t (:foreground "LightBlue")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (lazy-highlight-face ((t (:bold t :foreground "yellow" :weight bold)))) + (left-margin ((t (nil)))) + (linemenu-face ((t (:background "gray30")))) + (list-mode-item-selected ((t (:background "gray68")))) + (log-view-file-face ((t (:bold t :background "grey70" :weight bold)))) + (log-view-message-face ((t (:background "grey85")))) + (magenta ((t (:foreground "gray85")))) + (makefile-space-face ((t (:background "hotpink" :foreground "white")))) + (man-bold ((t (:bold t :weight bold)))) + (man-heading ((t (:bold t :weight bold)))) + (man-italic ((t (:foreground "yellow")))) + (man-xref ((t (:underline t)))) + (menu ((t (:background "wheat" :foreground "gray30")))) + (message-cited-text ((t (:foreground "orange")))) + (message-cited-text-face ((t (:foreground "medium aquamarine")))) + (message-header-cc-face ((t (:bold t :foreground "gray85" :weight bold)))) + (message-header-contents ((t (:foreground "white")))) + (message-header-name-face ((t (:foreground "gray85")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "gray85")))) + (message-header-subject-face ((t (:bold t :foreground "green3" :weight bold)))) + (message-header-to-face ((t (:bold t :foreground "green2" :weight bold)))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-headers ((t (:bold t :foreground "orange" :weight bold)))) + (message-highlighted-header-contents ((t (:bold t :weight bold)))) + (message-mml-face ((t (:bold t :foreground "gray85" :weight bold)))) + (message-separator-face ((t (:foreground "gray85")))) + (message-url ((t (:bold t :foreground "pink" :weight bold)))) + (mmm-default-submode-face ((t (:background "#c0c0c5")))) + (mmm-face ((t (:background "black" :foreground "green")))) + (modeline ((t (:background "#3c5473" :foreground "lightgray" :box (:line-width -1 :style released-button :family "helv"))))) + (modeline-buffer-id ((t (:background "white" :foreground "DeepSkyBlue3" :slant normal :weight normal :width normal :family "outline-verdana")))) + (modeline-mousable ((t (:background "white" :foreground "DeepSkyBlue3")))) + (modeline-mousable-minor-mode ((t (:background "white" :foreground "DeepSkyBlue3")))) + (mouse ((t (:background "Grey")))) + (my-summary-highlight-face ((t (:background "PaleTurquoise4" :foreground "White")))) + (my-url-face ((t (:foreground "LightBlue")))) + (nil ((t (nil)))) + (paren-blink-off ((t (:foreground "gray80")))) + (paren-face-match ((t (:background "turquoise")))) + (paren-face-mismatch ((t (:background "purple" :foreground "white")))) + (paren-face-no-match ((t (:background "yellow" :foreground "gray30")))) + (paren-match ((t (:background "darkseagreen2")))) + (paren-mismatch ((t (:background "RosyBrown" :foreground "gray30")))) + (paren-mismatch-face ((t (:bold t :background "white" :foreground "red" :weight bold)))) + (paren-no-match-face ((t (:bold t :background "white" :foreground "red" :weight bold)))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray40")))) + (reb-match-0 ((t (:background "lightblue")))) + (reb-match-1 ((t (:background "aquamarine")))) + (reb-match-2 ((t (:background "springgreen")))) + (reb-match-3 ((t (:background "yellow")))) + (red ((t (:foreground "red")))) + (region ((t (:background "Cyan4")))) + (right-margin ((t (nil)))) + (scroll-bar ((t (:background "grey75")))) + (secondary-selection ((t (:background "gray60")))) + (semantic-dirty-token-face ((t (:background "gray10")))) + (semantic-intangible-face ((t (:foreground "gray25")))) + (semantic-read-only-face ((t (:background "gray25")))) + (semantic-unmatched-syntax-face ((t (:underline "red")))) + (senator-intangible-face ((t (:foreground "gray75")))) + (senator-momentary-highlight-face ((t (:background "gray70")))) + (senator-read-only-face ((t (:background "#664444")))) + (sgml-comment-face ((t (:foreground "dark turquoise")))) + (sgml-doctype-face ((t (:foreground "turquoise")))) + (sgml-end-tag-face ((t (:foreground "aquamarine")))) + (sgml-entity-face ((t (:foreground "gray85")))) + (sgml-ignored-face ((t (:background "gray60" :foreground "gray40")))) + (sgml-ms-end-face ((t (:foreground "green")))) + (sgml-ms-start-face ((t (:foreground "yellow")))) + (sgml-pi-face ((t (:foreground "lime green")))) + (sgml-sgml-face ((t (:foreground "brown")))) + (sgml-short-ref-face ((t (:foreground "deep sky blue")))) + (sgml-start-tag-face ((t (:foreground "aquamarine")))) + (sh-heredoc-face ((t (:foreground "tan")))) + (shell-option-face ((t (:foreground "gray85")))) + (shell-output-2-face ((t (:foreground "gray85")))) + (shell-output-3-face ((t (:foreground "gray85")))) + (shell-output-face ((t (:bold t :weight bold)))) + (shell-prompt-face ((t (:foreground "yellow")))) + (show-paren-match-face ((t (:bold t :background "turquoise" :weight bold)))) + (show-paren-mismatch-face ((t (:bold t :background "RosyBrown" :foreground "white" :weight bold)))) + (show-tabs-space-face ((t (:foreground "yellow")))) + (show-tabs-tab-face ((t (:foreground "red")))) + (smerge-base-face ((t (:foreground "red")))) + (smerge-markers-face ((t (:background "grey85")))) + (smerge-mine-face ((t (:foreground "Gray85")))) + (smerge-other-face ((t (:foreground "darkgreen")))) + (speedbar-button-face ((t (:bold t :weight bold)))) + (speedbar-directory-face ((t (:bold t :weight bold)))) + (speedbar-file-face ((t (:bold t :weight bold)))) + (speedbar-highlight-face ((t (:background "sea green")))) + (speedbar-selected-face ((t (:underline t)))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (strokes-char-face ((t (:background "lightgray")))) + (swbuff-current-buffer-face ((t (:bold t :foreground "gray85" :weight bold)))) + (template-message-face ((t (:bold t :weight bold)))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (:background "black")))) + (term-blue ((t (:foreground "blue")))) + (term-bluebg ((t (:background "blue")))) + (term-bold ((t (:bold t :weight bold)))) + (term-cyan ((t (:foreground "cyan")))) + (term-cyanbg ((t (:background "cyan")))) + (term-default ((t (:background "gray80" :foreground "gray30" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-lucida console")))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-green ((t (:foreground "green")))) + (term-greenbg ((t (:background "green")))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (:foreground "magenta")))) + (term-magentabg ((t (:background "magenta")))) + (term-red ((t (:foreground "red")))) + (term-redbg ((t (:background "red")))) + (term-underline ((t (:underline t)))) + (term-white ((t (:foreground "white")))) + (term-whitebg ((t (:background "white")))) + (term-yellow ((t (:foreground "yellow")))) + (term-yellowbg ((t (:background "yellow")))) + (tex-math-face ((t (:foreground "RosyBrown")))) + (texinfo-heading-face ((t (:foreground "Blue")))) + (text-cursor ((t (:background "Red3" :foreground "gray80")))) + (tool-bar ((t (:background "grey75" :foreground "black")))) + (toolbar ((t (:background "Gray80")))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (vc-annotate-face-0046FF ((t (:background "black" :foreground "wheat")))) + (vcursor ((t (:background "cyan" :foreground "blue" :underline t)))) + (vertical-divider ((t (:background "Gray80")))) + (vhdl-font-lock-attribute-face ((t (:foreground "gray85")))) + (vhdl-font-lock-directive-face ((t (:foreground "gray85")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "gray85")))) + (vhdl-font-lock-function-face ((t (:foreground "gray85")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "gray85" :weight bold)))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "gray85" :weight bold)))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "gray85")))) + (vhdl-speedbar-architecture-selected-face ((t (:foreground "gray85" :underline t)))) + (vhdl-speedbar-configuration-face ((t (:foreground "gray85")))) + (vhdl-speedbar-configuration-selected-face ((t (:foreground "gray85" :underline t)))) + (vhdl-speedbar-entity-face ((t (:foreground "gray85")))) + (vhdl-speedbar-entity-selected-face ((t (:foreground "gray85" :underline t)))) + (vhdl-speedbar-instantiation-face ((t (:foreground "gray85")))) + (vhdl-speedbar-instantiation-selected-face ((t (:foreground "gray85" :underline t)))) + (vhdl-speedbar-package-face ((t (:foreground "gray85")))) + (vhdl-speedbar-package-selected-face ((t (:foreground "gray85" :underline t)))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (vm-header-content-face ((t (:italic t :foreground "wheat" :slant italic)))) + (vm-header-from-face ((t (:italic t :foreground "wheat" :slant italic)))) + (vm-header-name-face ((t (:foreground "cyan")))) + (vm-header-subject-face ((t (:foreground "cyan")))) + (vm-header-to-face ((t (:italic t :foreground "cyan" :slant italic)))) + (vm-message-cited-face ((t (:foreground "Gray80")))) + (vm-monochrome-image ((t (:background "white" :foreground "gray30")))) + (vm-summary-face-1 ((t (:foreground "MediumAquamarine")))) + (vm-summary-face-2 ((t (:foreground "MediumAquamarine")))) + (vm-summary-face-3 ((t (:foreground "MediumAquamarine")))) + (vm-summary-face-4 ((t (:foreground "MediumAquamarine")))) + (vm-summary-highlight-face ((t (:foreground "White")))) + (vm-xface ((t (:background "white" :foreground "gray30")))) + (vmpc-pre-sig-face ((t (:foreground "gray85")))) + (vmpc-sig-face ((t (:foreground "gray85")))) + (vvb-face ((t (:background "pink" :foreground "gray30")))) + (w3m-anchor-face ((t (:bold t :foreground "gray85" :weight bold)))) + (w3m-arrived-anchor-face ((t (:bold t :foreground "gray85" :weight bold)))) + (w3m-header-line-location-content-face ((t (:background "dark olive green" :foreground "wheat")))) + (w3m-header-line-location-title-face ((t (:background "dark olive green" :foreground "beige")))) + (white ((t (:foreground "white")))) + (widget ((t (nil)))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "gray85")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85" :foreground "gray30")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "dim gray" :foreground "white")))) + (woman-addition-face ((t (:foreground "orange")))) + (woman-bold-face ((t (:bold t :weight bold)))) + (woman-italic-face ((t (:foreground "beige")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))) + (x-face ((t (:background "white" :foreground "gray30")))) + (xrdb-option-name-face ((t (:foreground "gray85")))) + (xref-keyword-face ((t (:foreground "gray85")))) + (xref-list-default-face ((t (nil)))) + (xref-list-pilot-face ((t (:foreground "gray85")))) + (xref-list-symbol-face ((t (:foreground "navy")))) + (xsl-fo-alternate-face ((t (:foreground "Yellow")))) + (xsl-fo-main-face ((t (:foreground "PaleGreen")))) + (xsl-other-element-face ((t (:foreground "Coral")))) + (xsl-xslt-alternate-face ((t (:foreground "LightGray")))) + (xsl-xslt-main-face ((t (:foreground "Wheat")))) + (xxml-emph-1-face ((t (:background "lightyellow")))) + (xxml-emph-2-face ((t (:background "lightyellow")))) + (xxml-header-1-face ((t (:background "seashell1" :foreground "MediumAquamarine")))) + (xxml-header-2-face ((t (:background "seashell1" :foreground "SkyBlue")))) + (xxml-header-3-face ((t (:background "seashell1")))) + (xxml-header-4-face ((t (:background "seashell1")))) + (xxml-interaction-face ((t (:background "lightcyan")))) + (xxml-rug-face ((t (:background "cyan")))) + (xxml-sparkle-face ((t (:background "yellow")))) + (xxml-unbreakable-space-face ((t (:foreground "grey" :underline t)))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "Cyan4"))))))) + +(defun color-theme-blue-mood () + "Color theme by Nelson Loyola, created 2002-04-15. +Includes cperl, custom, font-lock, p4, speedbar, widget." + (interactive) + (color-theme-install + '(color-theme-blue-mood + ((background-color . "DodgerBlue4") + (background-mode . dark) + (background-toolbar-color . "#bfbfbfbfbfbf") + (border-color . "Blue") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#6c6c68686868") + (cursor-color . "DarkGoldenrod1") + (foreground-color . "white smoke") + (mouse-color . "black") + (top-toolbar-shadow-color . "#e5e5e0e0e1e1")) + ((vc-annotate-very-old-color . "#0046FF")) + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (nil)))) + (border-glyph ((t (nil)))) + (cmode-bracket-face ((t (:bold t)))) + (cperl-array-face ((t (:bold t :foreground "wheat")))) + (cperl-hash-face ((t (:bold t :foreground "chartreuse")))) + (custom-button-face ((t (nil)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:bold t :foreground "cyan")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (ff-paths-non-existant-file-face ((t (:bold t :foreground "NavyBlue")))) + (font-lock-builtin-face ((t (:bold t :foreground "wheat")))) + (font-lock-comment-face ((t (:bold t :foreground "gray72")))) + (font-lock-constant-face ((t (:bold t :foreground "cyan3")))) + (font-lock-doc-string-face ((t (:foreground "#00C000")))) + (font-lock-function-name-face ((t (:bold t :foreground "chartreuse")))) + (font-lock-keyword-face ((t (:bold t :foreground "gold1")))) + (font-lock-other-emphasized-face ((t (:bold t :foreground "gold1")))) + (font-lock-other-type-face ((t (:bold t :foreground "gold1")))) + (font-lock-preprocessor-face ((t (:foreground "plum")))) + (font-lock-reference-face ((t (:bold t :foreground "orangered")))) + (font-lock-string-face ((t (:foreground "tomato")))) + (font-lock-type-face ((t (:bold t :foreground "gold1")))) + (font-lock-variable-name-face ((t (:foreground "light yellow")))) + (font-lock-warning-face ((t (:foreground "tomato")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:size "nil" :background "#e7e3d6" :foreground" #000000")))) + (highlight ((t (:background "red" :foreground "yellow")))) + (isearch ((t (:bold t :background "pale turquoise" :foreground "blue")))) + (italic ((t (nil)))) + (lazy-highlight-face ((t (:bold t :foreground "dark magenta")))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:bold t :background "gray68" :foreground "yellow")))) + (modeline ((t (:background "goldenrod" :foreground "darkblue")))) + (modeline-buffer-id ((t (:background "goldenrod" :foreground "darkblue")))) + (modeline-mousable ((t (:background "goldenrod" :foreground "darkblue")))) + (modeline-mousable-minor-mode ((t (:background "goldenrod" :foreground "darkblue")))) + (my-tab-face ((t (:background "SlateBlue1")))) + (p4-depot-added-face ((t (:foreground "steelblue1")))) + (p4-depot-deleted-face ((t (:foreground "red")))) + (p4-depot-unmapped-face ((t (:foreground "grey90")))) + (p4-diff-change-face ((t (:foreground "dark green")))) + (p4-diff-del-face ((t (:bold t :foreground "salmon")))) + (p4-diff-file-face ((t (:background "blue")))) + (p4-diff-head-face ((t (:background "blue")))) + (p4-diff-ins-face ((t (:foreground "steelblue1")))) + (paren-blink-off ((t (:foreground "DodgerBlue4")))) + (paren-match ((t (:background "red" :foreground "yellow")))) + (paren-mismatch ((t (:background "DeepPink")))) + (pointer ((t (:background "white")))) + (primary-selection ((t (:bold t :background "medium sea green")))) + (red ((t (:foreground "red")))) + (region ((t (:background "red" :foreground "yellow")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "gray91" :foreground "sienna3")))) + (show-paren-match-face ((t (:background "cyan3" :foreground "blue")))) + (show-paren-mismatch-face ((t (:background "red" :foreground "blue")))) + (show-trailing-whitespace ((t (:background "red" :foreground "blue")))) + (speedbar-button-face ((t (:foreground "white")))) + (speedbar-directory-face ((t (:foreground "gray")))) + (speedbar-file-face ((t (:foreground "gold1")))) + (speedbar-highlight-face ((t (:background "lightslateblue" :foreground "gold1")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "chartreuse")))) + (text-cursor ((t (:background "DarkGoldenrod1" :foreground "DodgerBlue4")))) + (toolbar ((t (:background "#e7e3d6" :foreground "#000000")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (:background "#e7e3d6" :foreground "#000000")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "white" :foreground "midnightblue"))))))) + +(defun color-theme-euphoria () + "Color theme by oGLOWo, created 2000-04-19. +Green on black theme including font-lock, speedbar, and widget." + (interactive) + (color-theme-install + '(color-theme-euphoria + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "yellow") + (foreground-color . "#00ff00") + (mouse-color . "yellow")) + ((help-highlight-face . underline) + (list-matching-lines-face . bold) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "black" :foreground "#00ff00" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "misc-fixed")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cursor ((t (:background "yellow")))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:foreground "magenta")))) + (font-lock-comment-face ((t (:foreground "deeppink")))) + (font-lock-constant-face ((t (:foreground "blue")))) + (font-lock-doc-face ((t (:foreground "cyan")))) + (font-lock-doc-string-face ((t (:foreground "cyan")))) + (font-lock-function-name-face ((t (:foreground "purple")))) + (font-lock-keyword-face ((t (:foreground "red")))) + (font-lock-preprocessor-face ((t (:foreground "blue1")))) + (font-lock-reference-face ((t (nil)))) + (font-lock-string-face ((t (:foreground "cyan")))) + (font-lock-type-face ((t (:foreground "yellow")))) + (font-lock-variable-name-face ((t (:foreground "violet")))) + (font-lock-warning-face ((t (:bold t :foreground "red" :weight bold)))) + (fringe ((t (:background "gray16" :foreground "#00ff00")))) + (header-line ((t (:box (:line-width -1 :style released-button) :background "grey20" :foreground "grey90" :box nil)))) + (highlight ((t (:background "darkolivegreen")))) + (horizontal-divider ((t (:background "gray16" :foreground "#00ff00")))) + (isearch ((t (:background "palevioletred2" :foreground "brown4")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (menu ((t (:background "gray16" :foreground "green")))) + (modeline ((t (:background "gray16" :foreground "#00ff00" :box (:line-width -1 :style released-button))))) + (modeline-buffer-id ((t (:background "gray16" :foreground "#00ff00")))) + (modeline-mousable ((t (:background "gray16" :foreground "#00ff00")))) + (modeline-mousable-minor-mode ((t (:background "gray16" :foreground "#00ff00")))) + (mouse ((t (:background "yellow")))) + (primary-selection ((t (:background "#00ff00" :foreground "black")))) + (region ((t (:background "steelblue" :foreground "white")))) + (scroll-bar ((t (:background "gray16" :foreground "#00ff00")))) + (secondary-selection ((t (:background "#00ff00" :foreground "black")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:foreground "#00ff00")))) + (speedbar-directory-face ((t (:foreground "#00ff00")))) + (speedbar-file-face ((t (:foreground "cyan")))) + (speedbar-highlight-face ((t (:background "#00ff00" :foreground "purple")))) + (speedbar-selected-face ((t (:foreground "deeppink" :underline t)))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (tool-bar ((t (:background "gray16" :foreground "green" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "gray16" :foreground "#00ff00")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (vertical-divider ((t (:background "gray16" :foreground "#00ff00")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray")))) + (zmacs-region ((t (:background "steelblue" :foreground "white"))))))) + +(defun color-theme-resolve () + "Color theme by Damien Elmes, created 2002-04-24. +A white smoke on blue color theme." + (interactive) + (color-theme-install + '(color-theme-resolve + ((background-color . "#00457f") + (background-mode . dark) + (border-color . "black") + (cursor-color . "DarkGoldenrod1") + (foreground-color . "white smoke") + (mouse-color . "white")) + ((display-time-mail-face . mode-line) + (help-highlight-face . underline) + (list-matching-lines-face . bold) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "#00457f" :foreground "white smoke" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "b&h-lucidatypewriter")))) + (bold ((t (:bold t :foreground "snow2" :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (calendar-today-face ((t (:underline t)))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cperl-array-face ((t (:bold t :foreground "wheat" :weight bold)))) + (cperl-hash-face ((t (:bold t :foreground "chartreuse" :weight bold)))) + (cursor ((t (:background "DarkGoldenrod1")))) + (diary-face ((t (:foreground "yellow")))) + (erc-input-face ((t (:foreground "lightblue2")))) + (erc-notice-face ((t (:foreground "lightyellow3")))) + (fixed-pitch ((t (:family "courier")))) + (font-latex-bold-face ((t (:bold t :foreground "DarkOliveGreen" :weight bold)))) + (font-latex-italic-face ((t (:italic t :foreground "DarkOliveGreen" :slant italic)))) + (font-latex-math-face ((t (:foreground "burlywood")))) + (font-latex-sedate-face ((t (:foreground "LightGray")))) + (font-latex-string-face ((t (:foreground "RosyBrown")))) + (font-latex-warning-face ((t (:bold t :foreground "Red" :weight bold)))) + (font-lock-builtin-face ((t (:foreground "wheat")))) + (font-lock-comment-face ((t (:foreground "light steel blue")))) + (font-lock-constant-face ((t (:foreground "seashell3")))) + (font-lock-doc-face ((t (:foreground "plum")))) + (font-lock-doc-string-face ((t (:foreground "#008000")))) + (font-lock-function-name-face ((t (:foreground "thistle1")))) + (font-lock-keyword-face ((t (:foreground "wheat")))) + (font-lock-other-emphasized-face ((t (:bold t :foreground "gold1" :weight bold)))) + (font-lock-other-type-face ((t (:bold t :foreground "gold1" :weight bold)))) + (font-lock-preprocessor-face ((t (:foreground "#800080")))) + (font-lock-reference-face ((t (:foreground "wheat")))) + (font-lock-string-face ((t (:foreground "plum")))) + (font-lock-type-face ((t (:foreground "lawn green")))) + (font-lock-variable-name-face ((t (:foreground "light yellow")))) + (font-lock-warning-face ((t (:foreground "plum")))) + (fringe ((t (:background "#000000")))) + (gnus-cite-attribution-face ((t (:italic t :slant italic)))) + (gnus-cite-face-1 ((t (:foreground "light blue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "light cyan")))) + (gnus-cite-face-3 ((t (:foreground "light yellow")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :weight bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t :slant italic)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t :weight bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t :slant italic)))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "aquamarine3" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :weight bold)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t :weight bold)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t :weight bold)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise" :weight bold)))) + (gnus-header-content-face ((t (:italic t :foreground "snow2" :slant italic)))) + (gnus-header-from-face ((t (:foreground "spring green")))) + (gnus-header-name-face ((t (:bold t :foreground "snow2" :weight bold)))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "yellow" :slant italic)))) + (gnus-header-subject-face ((t (:bold t :foreground "peach puff" :weight bold)))) + (gnus-signature-face ((t (:italic t :slant italic)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "pink" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue" :slant italic)))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen" :slant italic)))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "pink" :slant italic)))) + (gnus-summary-low-unread-face ((t (:italic t :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (header-line ((t (:background "grey20" :foreground "grey90")))) + (highlight ((t (:background "gray91" :foreground "firebrick")))) + (highline-face ((t (:background "paleturquoise" :foreground "black")))) + (holiday-face ((t (:background "chocolate4")))) + (isearch ((t (:background "palevioletred2" :foreground "brown4")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (menu ((t (nil)))) + (message-cited-text-face ((t (:foreground "seashell3")))) + (message-header-cc-face ((t (:bold t :foreground "snow2" :weight bold)))) + (message-header-name-face ((t (:bold t :foreground "snow1" :weight bold)))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "snow2")))) + (message-header-subject-face ((t (:bold t :foreground "snow2" :weight bold)))) + (message-header-to-face ((t (:bold t :foreground "snow2" :weight bold)))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "misty rose")))) + (modeline ((t (:foreground "white" :background "#001040" :box (:line-width -1 :style released-button))))) + (modeline-buffer-id ((t (:foreground "white" :background "#001040")))) + (modeline-mousable ((t (:foreground "white" :background "#001040")))) + (modeline-mousable-minor-mode ((t (:foreground "white" :background "#001040")))) + (mouse ((t (:background "white")))) + (my-tab-face ((t (:background "SlateBlue1")))) + (p4-diff-del-face ((t (:bold t :foreground "salmon" :weight bold)))) + (primary-selection ((t (:background "gray91" :foreground "DodgerBlue4")))) + (region ((t (:background "gray91" :foreground "DodgerBlue4")))) + (scroll-bar ((t (:background "grey75")))) + (secondary-selection ((t (:background "gray91" :foreground "sienna3")))) + (show-paren-match-face ((t (:background "cyan3" :foreground "blue")))) + (show-paren-mismatch-face ((t (:background "red" :foreground "blue")))) + (tool-bar ((t (:background "grey75" :foreground "black")))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "steel blue")))) + (widget-inactive-face ((t (:foreground "grey")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (zmacs-region ((t (:background "gray91" :foreground "DodgerBlue4"))))))) + +(defun color-theme-xp () + "Color theme by Girish Bharadwaj, created 2002-04-25. +Includes custom, erc, font-lock, jde, semantic, speedbar, widget." + (interactive) + (color-theme-install + '(color-theme-xp + ((background-color . "lightyellow2") + (background-mode . light) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "gray20") + (mouse-color . "black")) + ((help-highlight-face . underline) + (list-matching-lines-face . bold) + (semantic-which-function-use-color . t) + (senator-eldoc-use-color . t) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "lightyellow2" :foreground "gray20" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-courier new")))) + (bg:erc-color-face0 ((t (:background "White")))) + (bg:erc-color-face1 ((t (:background "black")))) + (bg:erc-color-face10 ((t (:background "lightblue1")))) + (bg:erc-color-face11 ((t (:background "cyan")))) + (bg:erc-color-face12 ((t (:background "blue")))) + (bg:erc-color-face13 ((t (:background "deeppink")))) + (bg:erc-color-face14 ((t (:background "gray50")))) + (bg:erc-color-face15 ((t (:background "gray90")))) + (bg:erc-color-face2 ((t (:background "blue4")))) + (bg:erc-color-face3 ((t (:background "green4")))) + (bg:erc-color-face4 ((t (:background "red")))) + (bg:erc-color-face5 ((t (:background "brown")))) + (bg:erc-color-face6 ((t (:background "purple")))) + (bg:erc-color-face7 ((t (:background "orange")))) + (bg:erc-color-face8 ((t (:background "yellow")))) + (bg:erc-color-face9 ((t (:background "green")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (button ((t (:underline t)))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "dark blue")))) + (cursor ((t (:background "black")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "gray85")))) + (custom-comment-tag-face ((t (:foreground "blue4")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:bold t :foreground "blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "red" :weight bold :height 1.2)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "blue" :weight bold :height 1.2)))) + (erc-action-face ((t (:bold t :weight bold)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "IndianRed")))) + (erc-error-face ((t (:background "Red" :foreground "White")))) + (erc-input-face ((t (:foreground "brown")))) + (erc-inverse-face ((t (:background "Black" :foreground "White")))) + (erc-notice-face ((t (:bold t :foreground "SlateBlue" :weight bold)))) + (erc-prompt-face ((t (:bold t :background "lightBlue2" :foreground "Black" :weight bold)))) + (erc-timestamp-face ((t (:bold t :foreground "green" :weight bold)))) + (erc-underline-face ((t (:underline t)))) + (fg:erc-color-face0 ((t (:foreground "White")))) + (fg:erc-color-face1 ((t (:foreground "black")))) + (fg:erc-color-face10 ((t (:foreground "lightblue1")))) + (fg:erc-color-face11 ((t (:foreground "cyan")))) + (fg:erc-color-face12 ((t (:foreground "blue")))) + (fg:erc-color-face13 ((t (:foreground "deeppink")))) + (fg:erc-color-face14 ((t (:foreground "gray50")))) + (fg:erc-color-face15 ((t (:foreground "gray90")))) + (fg:erc-color-face2 ((t (:foreground "blue4")))) + (fg:erc-color-face3 ((t (:foreground "green4")))) + (fg:erc-color-face4 ((t (:foreground "red")))) + (fg:erc-color-face5 ((t (:foreground "brown")))) + (fg:erc-color-face6 ((t (:foreground "purple")))) + (fg:erc-color-face7 ((t (:foreground "orange")))) + (fg:erc-color-face8 ((t (:foreground "yellow")))) + (fg:erc-color-face9 ((t (:foreground "green")))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:foreground "magenta3" :underline t :height 0.9)))) + (font-lock-comment-face ((t (:italic t :foreground "gray60" :slant oblique :height 0.9)))) + (font-lock-constant-face ((t (:bold t :foreground "medium purple" :weight bold :height 0.9)))) + (font-lock-function-name-face ((t (:bold t :foreground "black" :weight bold)))) + (font-lock-keyword-face ((t (:bold t :foreground "blue" :weight bold)))) + (font-lock-string-face ((t (:foreground "red" :height 0.9)))) + (font-lock-type-face ((t (:foreground "Royalblue")))) + (font-lock-variable-name-face ((t (:bold t :foreground "maroon" :weight bold :height 0.9)))) + (font-lock-warning-face ((t (:bold t :foreground "Red" :weight bold)))) + (fringe ((t (:background "dodgerblue")))) + (header-line ((t (:underline "red" :overline "red" :background "grey90" :foreground "grey20" :box nil)))) + (highlight ((t (:background "darkseagreen2")))) + (isearch ((t (:background "magenta2" :foreground "lightskyblue1")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise")))) + (italic ((t (:italic t :slant italic)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-db-active-breakpoint-face ((t (:background "red" :foreground "black")))) + (jde-db-requested-breakpoint-face ((t (:background "yellow" :foreground "black")))) + (jde-db-spec-breakpoint-face ((t (:background "green" :foreground "black")))) + (jde-java-font-lock-api-face ((t (:foreground "dark goldenrod")))) + (jde-java-font-lock-bold-face ((t (:bold t :weight bold)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "CadetBlue")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "green4")))) + (jde-java-font-lock-italic-face ((t (:italic t :slant italic)))) + (jde-java-font-lock-link-face ((t (:foreground "cadetblue" :underline t :slant normal)))) + (jde-java-font-lock-modifier-face ((t (:foreground "Orchid")))) + (jde-java-font-lock-number-face ((t (:foreground "RosyBrown")))) + (jde-java-font-lock-operator-face ((t (:foreground "medium blue")))) + (jde-java-font-lock-package-face ((t (:foreground "blue3")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (menu ((t (nil)))) + (minibuffer-prompt ((t (:foreground "dark blue")))) + (modeline ((t (:background "dodgerblue" :foreground "black" :overline "red" :underline "red")))) + (modeline-buffer-id ((t (:background "dodgerblue" :foreground "black")))) + (modeline-mousable ((t (:background "dodgerblue" :foreground "black")))) + (modeline-mousable-minor-mode ((t (:background "dodgerblue" :foreground "black")))) + (mode-line-inactive ((t (:italic t :underline "red" :overline "red" :background "white" :foreground "cadetblue" :box (:line-width -1 :color "grey75") :slant oblique :weight light)))) + (mouse ((t (:background "black")))) + (primary-selection ((t (:background "lightgoldenrod2")))) + (region ((t (:background "lightgoldenrod2")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "yellow")))) + (semantic-dirty-token-face ((t (:background "lightyellow")))) + (semantic-unmatched-syntax-face ((t (:underline "red")))) + (senator-intangible-face ((t (:foreground "gray25")))) + (senator-momentary-highlight-face ((t (:background "gray70")))) + (senator-read-only-face ((t (:background "#CCBBBB")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "brown")))) + (template-message-face ((t (:bold t :weight bold)))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (zmacs-region ((t (:background "lightgoldenrod2"))))))) + +(defun color-theme-gray30 () + "Color theme by Girish Bharadwaj, created 2002-04-22." + (interactive) + (color-theme-install + '(color-theme-gray30 + ((background-color . "grey30") + (background-mode . dark) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "gainsboro") + (mouse-color . "black")) + ((help-highlight-face . underline) + (list-matching-lines-face . bold) + (semantic-which-function-use-color . t) + (senator-eldoc-use-color . t) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "grey30" :foreground "gainsboro" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-courier new")))) + (bg:erc-color-face0 ((t (:background "White")))) + (bg:erc-color-face1 ((t (:background "black")))) + (bg:erc-color-face10 ((t (:background "lightblue1")))) + (bg:erc-color-face11 ((t (:background "cyan")))) + (bg:erc-color-face12 ((t (:background "blue")))) + (bg:erc-color-face13 ((t (:background "deeppink")))) + (bg:erc-color-face14 ((t (:background "gray50")))) + (bg:erc-color-face15 ((t (:background "gray90")))) + (bg:erc-color-face2 ((t (:background "blue4")))) + (bg:erc-color-face3 ((t (:background "green4")))) + (bg:erc-color-face4 ((t (:background "red")))) + (bg:erc-color-face5 ((t (:background "brown")))) + (bg:erc-color-face6 ((t (:background "purple")))) + (bg:erc-color-face7 ((t (:background "orange")))) + (bg:erc-color-face8 ((t (:background "yellow")))) + (bg:erc-color-face9 ((t (:background "green")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (button ((t (:underline t)))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cursor ((t (:background "black")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "dim gray")))) + (custom-comment-tag-face ((t (:foreground "gray80")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:bold t :foreground "light blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "pink" :weight bold :height 1.2)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "lime green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "light blue" :weight bold :height 1.2)))) + (erc-action-face ((t (:bold t :weight bold)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "IndianRed")))) + (erc-error-face ((t (:background "Red" :foreground "White")))) + (erc-input-face ((t (:foreground "brown")))) + (erc-inverse-face ((t (:background "Black" :foreground "White")))) + (erc-notice-face ((t (:bold t :foreground "SlateBlue" :weight bold)))) + (erc-prompt-face ((t (:bold t :background "lightBlue2" :foreground "Black" :weight bold)))) + (erc-timestamp-face ((t (:bold t :foreground "green" :weight bold)))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid" :weight bold)))) + (eshell-ls-backup-face ((t (:foreground "LightSalmon")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed" :weight bold)))) + (eshell-ls-directory-face ((t (:bold t :foreground "SkyBlue" :weight bold)))) + (eshell-ls-executable-face ((t (:bold t :foreground "Green" :weight bold)))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red" :weight bold)))) + (eshell-ls-product-face ((t (:foreground "LightSalmon")))) + (eshell-ls-readonly-face ((t (:foreground "Pink")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta" :weight bold)))) + (eshell-ls-symlink-face ((t (:bold t :foreground "Cyan" :weight bold)))) + (eshell-ls-unreadable-face ((t (:foreground "DarkGrey")))) + (fg:erc-color-face0 ((t (:foreground "White")))) + (fg:erc-color-face1 ((t (:foreground "black")))) + (fg:erc-color-face10 ((t (:foreground "lightblue1")))) + (fg:erc-color-face11 ((t (:foreground "cyan")))) + (fg:erc-color-face12 ((t (:foreground "blue")))) + (fg:erc-color-face13 ((t (:foreground "deeppink")))) + (fg:erc-color-face14 ((t (:foreground "gray50")))) + (fg:erc-color-face15 ((t (:foreground "gray90")))) + (fg:erc-color-face2 ((t (:foreground "blue4")))) + (fg:erc-color-face3 ((t (:foreground "green4")))) + (fg:erc-color-face4 ((t (:foreground "red")))) + (fg:erc-color-face5 ((t (:foreground "brown")))) + (fg:erc-color-face6 ((t (:foreground "purple")))) + (fg:erc-color-face7 ((t (:foreground "orange")))) + (fg:erc-color-face8 ((t (:foreground "yellow")))) + (fg:erc-color-face9 ((t (:foreground "green")))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:foreground "LightSkyBlue" :underline t)))) + (font-lock-comment-face ((t (:italic t :foreground "lightgreen" :slant oblique)))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-function-name-face ((t (:bold t :foreground "DodgerBlue" :weight bold :height 1.05)))) + (font-lock-keyword-face ((t (:foreground "LightPink" :height 1.05)))) + (font-lock-string-face ((t (:foreground "LightSalmon")))) + (font-lock-type-face ((t (:foreground "yellow" :height 1.05)))) + (font-lock-variable-name-face ((t (:foreground "gold")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink" :weight bold)))) + (fringe ((t (:background "grey10")))) + (header-line ((t (:box (:line-width -1 :style released-button) :background "grey20" :foreground "grey90" :box nil)))) + (highlight ((t (:background "darkolivegreen")))) + (isearch ((t (:background "palevioletred2" :foreground "brown4")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-db-active-breakpoint-face ((t (:background "red" :foreground "black")))) + (jde-db-requested-breakpoint-face ((t (:background "yellow" :foreground "black")))) + (jde-db-spec-breakpoint-face ((t (:background "green" :foreground "black")))) + (jde-java-font-lock-api-face ((t (:foreground "light goldenrod")))) + (jde-java-font-lock-bold-face ((t (:bold t :weight bold)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "Aquamarine")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "light coral")))) + (jde-java-font-lock-italic-face ((t (:italic t :slant italic)))) + (jde-java-font-lock-link-face ((t (:foreground "cadetblue" :underline t :slant normal)))) + (jde-java-font-lock-modifier-face ((t (:foreground "LightSteelBlue")))) + (jde-java-font-lock-number-face ((t (:foreground "LightSalmon")))) + (jde-java-font-lock-operator-face ((t (:foreground "medium blue")))) + (jde-java-font-lock-package-face ((t (:foreground "steelblue1")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (menu ((t (nil)))) + (minibuffer-prompt ((t (:foreground "cyan")))) + (mode-line ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (mode-line-inactive ((t (:background "grey30" :foreground "grey80" :box (:line-width -1 :color "grey40" :style nil) :weight light)))) + (mouse ((t (:background "black")))) + (primary-selection ((t (:background "blue3")))) + (region ((t (:background "blue3")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "SkyBlue4")))) + (semantic-dirty-token-face ((t (:background "lightyellow")))) + (semantic-unmatched-syntax-face ((t (:underline "red")))) + (senator-intangible-face ((t (:foreground "gray75")))) + (senator-momentary-highlight-face ((t (:background "gray30")))) + (senator-read-only-face ((t (:background "#664444")))) + (show-paren-match-face ((t (:background "steelblue3")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green3")))) + (speedbar-directory-face ((t (:foreground "light blue")))) + (speedbar-file-face ((t (:foreground "cyan")))) + (speedbar-highlight-face ((t (:background "sea green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (template-message-face ((t (:bold t :weight bold)))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray")))) + (zmacs-region ((t (:background "blue3"))))))) + +(defun color-theme-dark-green () + "Color theme by ces93, created 2002-03-30." + (interactive) + (color-theme-install + '(color-theme-dark-green + ((background-mode . light) + (background-toolbar-color . "#e79ddf7ddf7d") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#8e3886178617") + (top-toolbar-shadow-color . "#ffffffffffff")) + nil + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (nil)))) + (fringe ((t (nil)))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:background "#ffffff" :foreground "#000000")))) + (highlight ((t (:background "gray" :foreground "darkred")))) + (isearch ((t (:background "LightSlateGray" :foreground "red")))) + (italic ((t (:italic t)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68")))) + (mode-line ((t (:background "LightSlateGray" :foreground "black")))) + (modeline ((t (:background "LightSlateGray" :foreground "black")))) + (modeline-buffer-id ((t (:background "LightSlateGray" :foreground "blue4")))) + (modeline-mousable ((t (:background "LightSlateGray" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "LightSlateGray" :foreground "green4")))) + (pointer ((t (:background "#ffffff" :foreground "#000000")))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "gray65")))) + (right-margin ((t (nil)))) + (rpm-spec-dir-face ((t (:foreground "green")))) + (rpm-spec-doc-face ((t (:foreground "magenta")))) + (rpm-spec-ghost-face ((t (:foreground "red")))) + (rpm-spec-macro-face ((t (:foreground "purple")))) + (rpm-spec-package-face ((t (:foreground "red")))) + (rpm-spec-tag-face ((t (:foreground "blue")))) + (secondary-selection ((t (:background "paleturquoise")))) + (text-cursor ((t (:background "Red3" :foreground "DarkSlateGray")))) + (tool-bar ((t (nil)))) + (toolbar ((t (:background "#ffffff" :foreground "#000000")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (:background "#ffffff" :foreground "#000000")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "darkorange" :foreground "black"))))))) + +(defun color-theme-whateveryouwant () + "Color theme by Fabien Penso, created 2002-05-02." + (interactive) + (color-theme-install + '(color-theme-whateveryouwant + ((background-color . "white") + (background-mode . light) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "black") + (mouse-color . "black")) + ((cperl-here-face . font-lock-string-face) + (cperl-invalid-face . underline) + (cperl-pod-face . font-lock-comment-face) + (cperl-pod-head-face . font-lock-variable-name-face) + (display-time-mail-face . mode-line) + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-carpal-button-face . bold) + (gnus-carpal-header-face . bold-italic) + (gnus-cite-attribution-face . gnus-cite-attribution-face) + (gnus-mouse-face . highlight) + (gnus-selected-tree-face . modeline) + (gnus-signature-face . gnus-signature-face) + (gnus-summary-selected-face . gnus-summary-selected-face) + (gnus-treat-display-xface . head) + (help-highlight-face . underline) + (ispell-highlight-face . flyspell-incorrect-face) + (list-matching-lines-face . bold) + (sgml-set-face . t) + (view-highlight-face . highlight) + (widget-mouse-face . highlight) + (x-face-mouse-face . highlight)) + (default ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 116 :width normal :family "monotype-courier new")))) + (Info-title-1-face ((t (:bold t :weight bold :height 1.728 :family "helv")))) + (Info-title-2-face ((t (:bold t :weight bold :height 1.44 :family "helv")))) + (Info-title-3-face ((t (:bold t :weight bold :height 1.2 :family "helv")))) + (Info-title-4-face ((t (:bold t :weight bold :family "helv")))) + (antlr-font-lock-keyword-face ((t (:bold t :foreground "black" :weight bold)))) + (antlr-font-lock-literal-face ((t (:bold t :foreground "brown4" :weight bold)))) + (antlr-font-lock-ruledef-face ((t (:bold t :foreground "blue" :weight bold)))) + (antlr-font-lock-ruleref-face ((t (:foreground "blue4")))) + (antlr-font-lock-tokendef-face ((t (:bold t :foreground "blue" :weight bold)))) + (antlr-font-lock-tokenref-face ((t (:foreground "orange4")))) + (bbdb-company ((t (:italic t :slant italic)))) + (bbdb-field-name ((t (:bold t :foreground "gray40" :weight bold)))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (:underline t)))) + (bold ((t (:bold t :foreground "gray40" :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (calendar-today-face ((t (:underline t)))) + (change-log-acknowledgement-face ((t (:foreground "Firebrick")))) + (change-log-conditionals-face ((t (:foreground "DarkGoldenrod")))) + (change-log-date-face ((t (:foreground "RosyBrown")))) + (change-log-email-face ((t (:foreground "DarkGoldenrod")))) + (change-log-file-face ((t (:foreground "Blue")))) + (change-log-function-face ((t (:foreground "DarkGoldenrod")))) + (change-log-list-face ((t (:foreground "Purple")))) + (change-log-name-face ((t (:foreground "CadetBlue")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "dark blue")))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue" :weight bold)))) + (cperl-hash-face ((t (:italic t :bold t :background "lightyellow2" :foreground "Red" :slant italic :weight bold)))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (cursor ((t (:background "black")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "gray85")))) + (custom-comment-tag-face ((t (:foreground "blue4")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :weight bold :height 1.2 :family "helv")))) + (custom-group-tag-face ((t (:bold t :foreground "blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :foreground "red" :weight bold :height 1.2 :family "helv")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :foreground "blue" :weight bold :height 1.2 :family "helv")))) + (cvs-filename-face ((t (:foreground "blue4")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:bold t :foreground "blue4" :weight bold)))) + (cvs-marked-face ((t (:bold t :foreground "green3" :weight bold)))) + (cvs-msg-face ((t (:italic t :slant italic)))) + (cvs-need-action-face ((t (:foreground "orange")))) + (cvs-unknown-face ((t (:foreground "red")))) + (diary-face ((t (:foreground "red")))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (:foreground "grey50")))) + (diff-file-header-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-function-face ((t (:foreground "grey50")))) + (diff-header-face ((t (:background "grey85")))) + (diff-hunk-header-face ((t (:background "grey85")))) + (diff-index-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-nonexistent-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-removed-face ((t (nil)))) + (dired-face-boring ((t (:foreground "RosyBrown")))) + (dired-face-directory ((t (:foreground "Blue")))) + (dired-face-executable ((t (nil)))) + (dired-face-flagged ((t (:bold t :foreground "Red" :weight bold)))) + (dired-face-marked ((t (:bold t :foreground "Red" :weight bold)))) + (dired-face-permissions ((t (nil)))) + (dired-face-setuid ((t (nil)))) + (dired-face-socket ((t (nil)))) + (dired-face-symlink ((t (:foreground "Purple")))) + (ebrowse-default-face ((t (nil)))) + (ebrowse-file-name-face ((t (:italic t :slant italic)))) + (ebrowse-member-attribute-face ((t (:foreground "red")))) + (ebrowse-member-class-face ((t (:foreground "purple")))) + (ebrowse-progress-face ((t (:background "blue")))) + (ebrowse-root-class-face ((t (:bold t :foreground "blue" :weight bold)))) + (ebrowse-tree-mark-face ((t (:foreground "red")))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (erc-action-face ((t (:bold t :weight bold)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "LightSalmon")))) + (erc-error-face ((t (:bold t :foreground "IndianRed" :weight bold)))) + (erc-input-face ((t (:foreground "Beige")))) + (erc-inverse-face ((t (:background "wheat" :foreground "darkslategrey")))) + (erc-notice-face ((t (:foreground "MediumAquamarine")))) + (erc-pal-face ((t (:foreground "pale green")))) + (erc-prompt-face ((t (:foreground "MediumAquamarine")))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid" :weight bold)))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed" :weight bold)))) + (eshell-ls-directory-face ((t (:bold t :foreground "Blue" :weight bold)))) + (eshell-ls-executable-face ((t (:bold t :foreground "ForestGreen" :weight bold)))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red" :weight bold)))) + (eshell-ls-picture-face ((t (:foreground "Violet")))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta" :weight bold)))) + (eshell-ls-symlink-face ((t (:bold t :foreground "Dark Cyan" :weight bold)))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:bold t :foreground "#aa0000" :weight bold :width condensed :family "neep-alt")))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed" :weight bold)))) + (eshell-test-ok-face ((t (:bold t :foreground "Green" :weight bold)))) + (excerpt ((t (:italic t :slant italic)))) + (fixed ((t (:bold t :weight bold)))) + (fixed-pitch ((t (:family "courier")))) + (flyspell-duplicate-face ((t (:bold t :foreground "Gold3" :underline t :weight bold)))) + (flyspell-incorrect-face ((t (:bold t :foreground "OrangeRed" :underline t :weight bold)))) + (font-latex-bold-face ((t (:bold t :foreground "DarkOliveGreen" :weight bold)))) + (font-latex-italic-face ((t (:italic t :foreground "DarkOliveGreen" :slant italic)))) + (font-latex-math-face ((t (:foreground "SaddleBrown")))) + (font-latex-sedate-face ((t (:foreground "DimGray")))) + (font-latex-string-face ((t (:foreground "RosyBrown")))) + (font-latex-warning-face ((t (:bold t :foreground "Red" :weight bold)))) + (font-lock-builtin-face ((t (:foreground "dodgerblue3")))) + (font-lock-comment-face ((t (:foreground "#cc0000" :width semi-condensed :family "helvetica")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-doc-face ((t (:foreground "RosyBrown")))) + (font-lock-doc-string-face ((t (:foreground "RosyBrown")))) + (font-lock-function-name-face ((t (:bold t :foreground "navy" :weight bold :height 100)))) + (font-lock-keyword-face ((t (:bold t :foreground "red4" :weight bold)))) + (font-lock-preprocessor-face ((t (:foreground "CadetBlue")))) + (font-lock-reference-face ((t (:foreground "Orchid")))) + (font-lock-string-face ((t (:foreground "navy")))) + (font-lock-type-face ((t (:bold t :foreground "black" :weight bold)))) + (font-lock-variable-name-face ((t (:foreground "black")))) + (font-lock-warning-face ((t (:foreground "orange2")))) + (fringe ((t (:background "white")))) + (gnus-cite-attribution-face ((t (:italic t :slant italic)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :weight bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t :slant italic)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t :weight bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t :slant italic)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "red" :weight normal :height 120 :family "courier")))) + (gnus-group-news-1-face ((t (:foreground "red" :weight normal :height 120 :family "courier")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4" :weight bold)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :weight bold)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t :weight bold)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t :weight bold)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen" :weight bold)))) + (gnus-header-content-face ((t (:foreground "goldenrod" :slant normal :family "helvetica")))) + (gnus-header-from-face ((t (:bold t :foreground "grey75" :weight bold :height 140 :family "helvetica")))) + (gnus-header-name-face ((t (:foreground "grey75" :height 120 :family "helvetica")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "MidnightBlue" :slant italic)))) + (gnus-header-subject-face ((t (:bold t :foreground "firebrick" :weight bold :height 160 :family "helvetica")))) + (gnus-picon-face ((t (:background "white" :foreground "black")))) + (gnus-picon-xbm-face ((t (:background "white" :foreground "black")))) + (gnus-signature-face ((t (:italic t :slant italic)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue" :slant italic)))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen" :slant italic)))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick" :slant italic)))) + (gnus-summary-low-unread-face ((t (:italic t :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "grey65" :height 110 :width condensed :family "neep")))) + (gnus-summary-normal-read-face ((t (:foreground "grey75" :height 110 :width condensed :family "neep")))) + (gnus-summary-normal-ticked-face ((t (:bold t :foreground "firebrick" :weight bold :height 110 :width condensed :family "neep")))) + (gnus-summary-normal-unread-face ((t (:foreground "firebrick" :height 110 :width condensed :family "neep")))) + (gnus-summary-selected-face ((t (:background "gold" :foreground "black" :box (:line-width 1 :color "yellow" :style released-button) :height 140 :width condensed :family "neep")))) + (header-line ((t (:background "grey90" :foreground "grey20" :box nil)))) + (hi-black-b ((t (:bold t :weight bold)))) + (hi-black-hb ((t (:bold t :weight bold :height 1.67 :family "helv")))) + (hi-blue ((t (:background "light blue")))) + (hi-blue-b ((t (:bold t :foreground "blue" :weight bold)))) + (hi-green ((t (:background "green")))) + (hi-green-b ((t (:bold t :foreground "green" :weight bold)))) + (hi-pink ((t (:background "pink")))) + (hi-red-b ((t (:bold t :foreground "red" :weight bold)))) + (hi-yellow ((t (:background "yellow")))) + (highlight ((t (:background "black" :foreground "white")))) + (highlight-changes-delete-face ((t (:foreground "red" :underline t)))) + (highlight-changes-face ((t (:foreground "red")))) + (highline-face ((t (:background "gray80")))) + (holiday-face ((t (:background "pink")))) + (idlwave-help-link-face ((t (:foreground "Blue")))) + (idlwave-shell-bp-face ((t (:background "Pink" :foreground "Black")))) + (info-header-node ((t (:italic t :bold t :foreground "brown" :slant italic :weight bold)))) + (info-header-xref ((t (:bold t :foreground "magenta4" :weight bold)))) + (info-menu-5 ((t (:foreground "red1")))) + (info-menu-header ((t (:bold t :weight bold :family "helv")))) + (info-node ((t (:italic t :bold t :foreground "brown" :slant italic :weight bold)))) + (info-xref ((t (:bold t :foreground "magenta4" :weight bold)))) + (isearch ((t (:background "magenta4" :foreground "lightskyblue1")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise")))) + (italic ((t (:italic t :slant italic)))) + (log-view-file-face ((t (:bold t :background "grey70" :weight bold)))) + (log-view-message-face ((t (:background "grey85")))) + (makefile-space-face ((t (:background "hotpink")))) + (menu ((t (nil)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "grey45" :weight normal :family "helvetica")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue" :weight bold)))) + (message-header-to-face ((t (:bold t :foreground "grey60" :weight bold :height 120 :family "helvetica")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (mode-line ((t (:background "grey90" :foreground "black" :box (:line-width 1 :style none) :width condensed :family "neep")))) + (modeline-buffer-id ((t (:bold t :background "grey75" :foreground "black" :box (:line-width -1 :style released-button) :weight bold)))) + (modeline-mousable ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (modeline-mousable-minor-mode ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (mouse ((t (:background "black")))) + (mpg123-face-cur ((t (:background "#004080" :foreground "yellow")))) + (mpg123-face-slider ((t (:background "yellow" :foreground "black")))) + (primary-selection ((t (:background "lightgoldenrod2")))) + (reb-match-0 ((t (:background "lightblue")))) + (reb-match-1 ((t (:background "aquamarine")))) + (reb-match-2 ((t (:background "springgreen")))) + (reb-match-3 ((t (:background "yellow")))) + (region ((t (:background "#aa0000" :foreground "white")))) + (scroll-bar ((t (:background "grey75")))) + (secondary-selection ((t (:background "yellow")))) + (sgml-comment-face ((t (:italic t :foreground "SeaGreen" :slant italic)))) + (sgml-doctype-face ((t (:bold t :foreground "FireBrick" :weight bold)))) + (sgml-end-tag-face ((t (:stipple nil :background "white" :foreground "SlateBlue" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 116 :width normal :family "monotype-courier new")))) + (sgml-entity-face ((t (:stipple nil :background "SlateBlue" :foreground "Red" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 116 :width normal :family "monotype-courier new")))) + (sgml-ignored-face ((t (nil)))) + (sgml-ms-end-face ((t (nil)))) + (sgml-ms-start-face ((t (nil)))) + (sgml-pi-face ((t (:bold t :foreground "gray40" :weight bold)))) + (sgml-sgml-face ((t (:bold t :foreground "gray40" :weight bold)))) + (sgml-short-ref-face ((t (nil)))) + (sgml-shortref-face ((t (:bold t :foreground "gray40" :weight bold)))) + (sgml-start-tag-face ((t (:stipple nil :background "white" :foreground "SlateBlue" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 116 :width normal :family "monotype-courier new")))) + (sh-heredoc-face ((t (:foreground "tan")))) + (show-paren-match-face ((t (:background "gray80" :foreground "black")))) + (show-paren-mismatch-face ((t (:background "red" :foreground "yellow")))) + (show-tabs-space-face ((t (:foreground "yellow")))) + (show-tabs-tab-face ((t (:foreground "red")))) + (smerge-base-face ((t (:foreground "red")))) + (smerge-markers-face ((t (:background "grey85")))) + (smerge-mine-face ((t (:foreground "blue")))) + (smerge-other-face ((t (:foreground "darkgreen")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "brown")))) + (strokes-char-face ((t (:background "lightgray")))) + (term-black ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-blackbg ((t (:stipple nil :background "black" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-blue ((t (:stipple nil :background "white" :foreground "blue" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-bluebg ((t (:stipple nil :background "blue" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-bold ((t (:bold t :stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight bold :width normal :family "adobe-courier")))) + (term-cyan ((t (:stipple nil :background "white" :foreground "cyan" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-cyanbg ((t (:stipple nil :background "cyan" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-bg ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-bg-inv ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-fg ((t (:stipple nil :background "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-fg-inv ((t (:stipple nil :background "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-green ((t (:stipple nil :background "white" :foreground "green" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-greenbg ((t (:stipple nil :background "green" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-invisible ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-invisible-inv ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-magenta ((t (:stipple nil :background "white" :foreground "magenta" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-magentabg ((t (:stipple nil :background "magenta" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-red ((t (:stipple nil :background "white" :foreground "red" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-redbg ((t (:stipple nil :background "red" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-underline ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline t :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-white ((t (:stipple nil :background "white" :foreground "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-whitebg ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-yellow ((t (:stipple nil :background "white" :foreground "yellow" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-yellowbg ((t (:stipple nil :background "yellow" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (tex-math-face ((t (:foreground "RosyBrown")))) + (texinfo-heading-face ((t (:foreground "Blue")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:foreground "navy" :underline t)))) + (variable-pitch ((t (:family "helv")))) + (vcursor ((t (:background "cyan" :foreground "blue" :underline t)))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red" :weight bold)))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange" :weight bold)))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:foreground "Blue" :underline t)))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:foreground "DarkGoldenrod" :underline t)))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:foreground "ForestGreen" :underline t)))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:foreground "Brown" :underline t)))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:foreground "Grey50" :underline t)))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (woman-addition-face ((t (:foreground "orange")))) + (woman-bold-face ((t (:bold t :foreground "blue" :weight bold)))) + (woman-italic-face ((t (:italic t :foreground "red" :underline t :slant italic)))) + (woman-unknown-face ((t (:foreground "brown")))) + (zmacs-region ((t (:background "lightgoldenrod2"))))))) + +(defun color-theme-bharadwaj-slate () + "Color theme by Girish Bharadwaj, created 2002-05-06." + (interactive) + (color-theme-install + '(color-theme-bharadwaj-slate + ((background-color . "DarkSlateGray") + (background-mode . dark) + (border-color . "black") + (cursor-color . "khaki") + (foreground-color . "palegreen") + (mouse-color . "black")) + ((display-time-mail-face . mode-line) + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-mouse-face . highlight) + (help-highlight-face . underline) + (ibuffer-deletion-face . font-lock-type-face) + (ibuffer-filter-group-name-face . bold) + (ibuffer-marked-face . font-lock-warning-face) + (ibuffer-title-face . font-lock-type-face) + (list-matching-lines-buffer-name-face . underline) + (list-matching-lines-face . bold) + (semantic-which-function-use-color . t) + (senator-eldoc-use-color . t) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "DarkSlateGray" :foreground "palegreen" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-lucida sans typewriter")))) + (bg:erc-color-face0 ((t (:background "White")))) + (bg:erc-color-face1 ((t (:background "black")))) + (bg:erc-color-face10 ((t (:background "lightblue1")))) + (bg:erc-color-face11 ((t (:background "cyan")))) + (bg:erc-color-face12 ((t (:background "blue")))) + (bg:erc-color-face13 ((t (:background "deeppink")))) + (bg:erc-color-face14 ((t (:background "gray50")))) + (bg:erc-color-face15 ((t (:background "gray90")))) + (bg:erc-color-face2 ((t (:background "blue4")))) + (bg:erc-color-face3 ((t (:background "green4")))) + (bg:erc-color-face4 ((t (:background "red")))) + (bg:erc-color-face5 ((t (:background "brown")))) + (bg:erc-color-face6 ((t (:background "purple")))) + (bg:erc-color-face7 ((t (:background "orange")))) + (bg:erc-color-face8 ((t (:background "yellow")))) + (bg:erc-color-face9 ((t (:background "green")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (button ((t (:underline t)))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cursor ((t (:background "khaki")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "dim gray")))) + (custom-comment-tag-face ((t (:foreground "gray80")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:bold t :foreground "light blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "pink" :weight bold :height 1.2)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "lime green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "light blue" :weight bold :height 1.2)))) + (erc-action-face ((t (:bold t :box (:line-width 2 :color "grey75") :weight bold)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "IndianRed")))) + (erc-error-face ((t (:background "Red" :foreground "White")))) + (erc-input-face ((t (:foreground "lightblue")))) + (erc-inverse-face ((t (:background "Black" :foreground "White")))) + (erc-notice-face ((t (:bold t :foreground "dodgerblue" :weight bold)))) + (erc-prompt-face ((t (:bold t :background "black" :foreground "white" :weight bold)))) + (erc-timestamp-face ((t (:bold t :foreground "green" :weight bold)))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid" :weight bold)))) + (eshell-ls-backup-face ((t (:foreground "LightSalmon")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed" :weight bold)))) + (eshell-ls-directory-face ((t (:bold t :foreground "SkyBlue" :weight bold)))) + (eshell-ls-executable-face ((t (:bold t :foreground "Green" :weight bold)))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red" :weight bold)))) + (eshell-ls-product-face ((t (:foreground "LightSalmon")))) + (eshell-ls-readonly-face ((t (:foreground "Pink")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta" :weight bold)))) + (eshell-ls-symlink-face ((t (:bold t :foreground "Cyan" :weight bold)))) + (eshell-ls-unreadable-face ((t (:foreground "DarkGrey")))) + (eshell-prompt-face ((t (:bold t :foreground "Pink" :weight bold)))) + (fg:erc-color-face0 ((t (:foreground "White")))) + (fg:erc-color-face1 ((t (:foreground "black")))) + (fg:erc-color-face10 ((t (:foreground "lightblue1")))) + (fg:erc-color-face11 ((t (:foreground "cyan")))) + (fg:erc-color-face12 ((t (:foreground "blue")))) + (fg:erc-color-face13 ((t (:foreground "deeppink")))) + (fg:erc-color-face14 ((t (:foreground "gray50")))) + (fg:erc-color-face15 ((t (:foreground "gray90")))) + (fg:erc-color-face2 ((t (:foreground "blue4")))) + (fg:erc-color-face3 ((t (:foreground "green4")))) + (fg:erc-color-face4 ((t (:foreground "red")))) + (fg:erc-color-face5 ((t (:foreground "brown")))) + (fg:erc-color-face6 ((t (:foreground "purple")))) + (fg:erc-color-face7 ((t (:foreground "orange")))) + (fg:erc-color-face8 ((t (:foreground "yellow")))) + (fg:erc-color-face9 ((t (:foreground "green")))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:bold t :foreground "pink" :weight bold :height 1.1)))) + (font-lock-comment-face ((t (:foreground "violet" :height 1.0)))) + (font-lock-constant-face ((t (:bold t :foreground "tomato" :weight bold :height 1.0)))) + (font-lock-function-name-face ((t (:bold t :foreground "DodgerBlue" :weight bold)))) + (font-lock-keyword-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (font-lock-preprocessor-face ((t (:bold t :foreground "tomato" :weight bold :height 1.0)))) + (font-lock-reference-face ((t (:bold t :foreground "pink" :weight bold :height 1.1)))) + (font-lock-string-face ((t (:foreground "red" :height 1.0)))) + (font-lock-type-face ((t (:foreground "lightblue3")))) + (font-lock-variable-name-face ((t (:bold t :foreground "gray" :weight bold :height 1.0)))) + (font-lock-warning-face ((t (:bold t :foreground "Pink" :weight bold)))) + (fringe ((t (:background "DarkSlateGray")))) + (gnus-cite-attribution-face ((t (:italic t :slant italic)))) + (gnus-cite-face-1 ((t (:foreground "light blue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "light cyan")))) + (gnus-cite-face-3 ((t (:foreground "light yellow")))) + (gnus-cite-face-4 ((t (:foreground "light pink")))) + (gnus-cite-face-5 ((t (:foreground "pale green")))) + (gnus-cite-face-6 ((t (:foreground "beige")))) + (gnus-cite-face-7 ((t (:foreground "orange")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :weight bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t :slant italic)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t :weight bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t :slant italic)))) + (gnus-group-mail-1-empty-face ((t (:foreground "aquamarine1")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "aquamarine1" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "aquamarine2")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "aquamarine2" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "aquamarine3")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "aquamarine3" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "aquamarine4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "aquamarine4" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "PaleTurquoise")))) + (gnus-group-news-1-face ((t (:bold t :foreground "PaleTurquoise" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "turquoise")))) + (gnus-group-news-2-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :weight bold)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t :weight bold)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t :weight bold)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkTurquoise")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkTurquoise" :weight bold)))) + (gnus-header-content-face ((t (:italic t :foreground "forest green" :slant italic)))) + (gnus-header-from-face ((t (:foreground "spring green")))) + (gnus-header-name-face ((t (:foreground "SeaGreen")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "yellow" :slant italic)))) + (gnus-header-subject-face ((t (:foreground "SeaGreen3")))) + (gnus-signature-face ((t (:italic t :slant italic)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "SkyBlue" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "PaleGreen" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "pink" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "SkyBlue" :slant italic)))) + (gnus-summary-low-read-face ((t (:italic t :foreground "PaleGreen" :slant italic)))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "pink" :slant italic)))) + (gnus-summary-low-unread-face ((t (:italic t :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "SkyBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "PaleGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "pink")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (header-line ((t (:underline "blueviolet" :overline "blueviolet" :box (:line-width -1 :style released-button) :background "grey20" :foreground "grey90" :box nil)))) + (highlight ((t (:background "darkolivegreen")))) + (html-helper-bold-face ((t (:bold t :foreground "wheat" :weight bold)))) + (html-helper-italic-face ((t (:italic t :foreground "spring green" :slant italic)))) + (html-helper-underline-face ((t (:foreground "cornsilk" :underline t)))) + (html-tag-face ((t (:bold t :foreground "deep sky blue" :weight bold)))) + (info-menu-6 ((t (nil)))) + (isearch ((t (:background "palevioletred2" :foreground "brown4")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-db-active-breakpoint-face ((t (:background "red" :foreground "black")))) + (jde-db-requested-breakpoint-face ((t (:background "yellow" :foreground "black")))) + (jde-db-spec-breakpoint-face ((t (:background "green" :foreground "black")))) + (jde-java-font-lock-api-face ((t (:foreground "light goldenrod")))) + (jde-java-font-lock-bold-face ((t (:bold t :weight bold)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "Aquamarine")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "light coral")))) + (jde-java-font-lock-italic-face ((t (:italic t :slant italic)))) + (jde-java-font-lock-link-face ((t (:foreground "blue" :underline t :slant normal)))) + (jde-java-font-lock-modifier-face ((t (:foreground "LightSteelBlue")))) + (jde-java-font-lock-number-face ((t (:foreground "LightSalmon")))) + (jde-java-font-lock-operator-face ((t (:foreground "medium blue")))) + (jde-java-font-lock-package-face ((t (:foreground "steelblue1")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (menu ((t (nil)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "green4" :weight bold)))) + (message-header-name-face ((t (:foreground "DarkGreen")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "yellow" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "#b00000")))) + (message-header-subject-face ((t (:foreground "green3")))) + (message-header-to-face ((t (:bold t :foreground "green2" :weight bold)))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "blue3")))) + (minibuffer-prompt ((t (:foreground "cyan")))) + (mode-line ((t (:background "Darkslategray" :foreground "white" :box (:line-width -1 :style released-button) :overline "blueviolet" :underline "blueviolet")))) + (mode-line-inactive ((t (:italic t :underline "blueviolet" :overline "blueviolet" :background "white" :foreground "cadetblue" :box (:line-width -1 :color "grey75") :slant oblique :weight light)))) + (modeline ((t (:background "Darkslategray" :foreground "white" :box (:line-width -1 :style released-button) :overline "blueviolet" :underline "blueviolet")))) + (modeline-buffer-id ((t (:background "Darkslategray" :foreground "white" :box (:line-width -1 :style released-button) :overline "blueviolet" :underline "blueviolet")))) + (modeline-mousable ((t (:background "Darkslategray" :foreground "white" :box (:line-width -1 :style released-button) :overline "blueviolet" :underline "blueviolet")))) + (modeline-mousable-minor-mode ((t (:background "Darkslategray" :foreground "white" :box (:line-width -1 :style released-button) :overline "blueviolet" :underline "blueviolet")))) + (mouse ((t (:background "black")))) + (primary-selection ((t (:background "dimgray")))) + (region ((t (:background "dimgray")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "SkyBlue4")))) + (semantic-dirty-token-face ((t (:background "lightyellow")))) + (semantic-unmatched-syntax-face ((t (:underline "red")))) + (senator-intangible-face ((t (:foreground "gray75")))) + (senator-momentary-highlight-face ((t (:background "gray30")))) + (senator-read-only-face ((t (:background "#664444")))) + (show-paren-match-face ((t (:bold t :foreground "lightblue" :weight bold :height 1.1)))) + (show-paren-mismatch-face ((t (:bold t :foreground "red" :weight bold :height 1.1)))) + (show-tabs-space-face ((t (:foreground "yellow")))) + (show-tabs-tab-face ((t (:foreground "red")))) + (speedbar-button-face ((t (:foreground "green3")))) + (speedbar-directory-face ((t (:foreground "light blue")))) + (speedbar-file-face ((t (:foreground "cyan")))) + (speedbar-highlight-face ((t (:background "sea green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (template-message-face ((t (:bold t :weight bold)))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (:background "black")))) + (term-blue ((t (:foreground "blue")))) + (term-bluebg ((t (:background "blue")))) + (term-bold ((t (:bold t :weight bold)))) + (term-cyan ((t (:foreground "cyan")))) + (term-cyanbg ((t (:background "cyan")))) + (term-default ((t (:stipple nil :background "DarkSlateGray" :foreground "palegreen" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "outline-lucida sans typewriter")))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-green ((t (:foreground "green")))) + (term-greenbg ((t (:background "green")))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (:foreground "magenta")))) + (term-magentabg ((t (:background "magenta")))) + (term-red ((t (:foreground "red")))) + (term-redbg ((t (:background "red")))) + (term-underline ((t (:underline t)))) + (term-white ((t (:foreground "white")))) + (term-whitebg ((t (:background "white")))) + (term-yellow ((t (:foreground "yellow")))) + (term-yellowbg ((t (:background "yellow")))) + (tool-bar ((t (:background "DarkSlateGray" :foreground "White" :box (:line-width 1 :color "blue"))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray")))) + (zmacs-region ((t (:background "dimgray"))))))) + +(defun color-theme-lethe () + "Color theme by Ivica Loncar, created 2002-08-02. +Some additional X resources as suggested by the author: + +Emacs*menubar.Foreground: Yellow +Emacs*menubar.Background: #1a2b3c +Emacs*menubar.topShadowColor: gray +Emacs*menubar.bottomShadowColor: dimgray + +Some fonts I really like (note: this fonts are not highly +available): + +Emacs.default.attributeFont: -letl-*-medium-r-*-*-*-*-*-*-*-*-iso8859-2 +Emacs*menubar*Font: -etl-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1 + +Mouse fix: + +Emacs*dialog*XmPushButton.translations:#override\n\ + : Arm()\n\ + ,: Activate()\ + Disarm()\n\ + (2+): MultiArm()\n\ + (2+): MultiActivate()\n\ + : Activate()\ + Disarm()\n\ + osfSelect: ArmAndActivate()\n\ + osfActivate: ArmAndActivate()\n\ + osfHelp: Help()\n\ + ~Shift ~Meta ~Alt Return: ArmAndActivate()\n\ + : Enter()\n\ + : Leave()\n + +Bonus: do not use 3D modeline." + (interactive) + (color-theme-install + '(color-theme-lethe + ((background-color . "black") + (background-mode . dark) + (background-toolbar-color . "#000000000000") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "red") + (cursor-color . "red") + (foreground-color . "peachpuff") + (mouse-color . "red") + (top-toolbar-shadow-color . "#f5f5f5f5f5f5")) + ((buffers-tab-face . buffers-tab) + (cscope-use-face . t) + (gnus-mouse-face . highlight)) + (default ((t (nil)))) + (bg:erc-color-face0 ((t (:background "White")))) + (bg:erc-color-face1 ((t (nil)))) + (bg:erc-color-face10 ((t (:background "lightblue1")))) + (bg:erc-color-face11 ((t (:background "cyan")))) + (bg:erc-color-face12 ((t (:background "blue")))) + (bg:erc-color-face13 ((t (:background "deeppink")))) + (bg:erc-color-face14 ((t (:background "gray50")))) + (bg:erc-color-face15 ((t (:background "gray90")))) + (bg:erc-color-face2 ((t (:background "blue4")))) + (bg:erc-color-face3 ((t (:background "green4")))) + (bg:erc-color-face4 ((t (:background "red")))) + (bg:erc-color-face5 ((t (:background "brown")))) + (bg:erc-color-face6 ((t (:background "purple")))) + (bg:erc-color-face7 ((t (:background "orange")))) + (bg:erc-color-face8 ((t (:background "yellow")))) + (bg:erc-color-face9 ((t (:background "green")))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border ((t (nil)))) + (border-glyph ((t (nil)))) + (buffers-tab ((t (:bold t :foreground "red")))) + (button ((t (:underline t)))) + (calendar-today-face ((t (:underline t)))) + (comint-highlight-input ((t (:bold t)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue")))) + (cperl-hash-face ((t (:italic t :bold t :background "lightyellow2" :foreground "Red")))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (cscope-file-face ((t (:foreground "blue")))) + (cscope-function-face ((t (:foreground "magenta")))) + (cscope-line-face ((t (:foreground "green")))) + (cscope-line-number-face ((t (:foreground "red")))) + (cscope-mouse-face ((t (:background "blue" :foreground "white")))) + (cursor ((t (nil)))) + (custom-button-face ((t (nil)))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black")))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "dim gray")))) + (custom-comment-tag-face ((t (:foreground "gray80")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t)))) + (custom-variable-tag-face ((t (:underline t :foreground "blue")))) + (cyan ((t (:foreground "cyan")))) + (diary-face ((t (:foreground "red")))) + (dired-face-boring ((t (:foreground "Gray65")))) + (dired-face-directory ((t (:bold t)))) + (dired-face-executable ((t (:foreground "SeaGreen")))) + (dired-face-flagged ((t (:background "LightSlateGray")))) + (dired-face-marked ((t (:background "PaleVioletRed")))) + (dired-face-permissions ((t (:background "grey75" :foreground "black")))) + (dired-face-setuid ((t (:foreground "Red")))) + (dired-face-socket ((t (:foreground "magenta")))) + (dired-face-symlink ((t (:foreground "cyan")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (erc-action-face ((t (:bold t)))) + (erc-bold-face ((t (:bold t)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "IndianRed")))) + (erc-error-face ((t (:background "Red" :foreground "White")))) + (erc-input-face ((t (:foreground "brown")))) + (erc-inverse-face ((t (:background "Black" :foreground "White")))) + (erc-notice-face ((t (:bold t :foreground "SlateBlue")))) + (erc-prompt-face ((t (:bold t :background "lightBlue2" :foreground "Black")))) + (erc-timestamp-face ((t (:bold t :foreground "green")))) + (erc-underline-face ((t (:underline t)))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid")))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-ls-directory-face ((t (:bold t :foreground "Blue")))) + (eshell-ls-executable-face ((t (:bold t :foreground "ForestGreen")))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red")))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta")))) + (eshell-ls-symlink-face ((t (:bold t :foreground "DarkCyan")))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:bold t :foreground "Red")))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed")))) + (eshell-test-ok-face ((t (:bold t :foreground "Green")))) + (excerpt ((t (:italic t)))) + (fg:erc-color-face0 ((t (:foreground "White")))) + (fg:erc-color-face1 ((t (:foreground "black")))) + (fg:erc-color-face10 ((t (:foreground "lightblue1")))) + (fg:erc-color-face11 ((t (:foreground "cyan")))) + (fg:erc-color-face12 ((t (:foreground "blue")))) + (fg:erc-color-face13 ((t (:foreground "deeppink")))) + (fg:erc-color-face14 ((t (:foreground "gray50")))) + (fg:erc-color-face15 ((t (:foreground "gray90")))) + (fg:erc-color-face2 ((t (:foreground "blue4")))) + (fg:erc-color-face3 ((t (:foreground "green4")))) + (fg:erc-color-face4 ((t (:foreground "red")))) + (fg:erc-color-face5 ((t (:foreground "brown")))) + (fg:erc-color-face6 ((t (:foreground "purple")))) + (fg:erc-color-face7 ((t (:foreground "orange")))) + (fg:erc-color-face8 ((t (:foreground "yellow")))) + (fg:erc-color-face9 ((t (:foreground "green")))) + (fixed ((t (:bold t)))) + (fixed-pitch ((t (:size "16")))) + (flyspell-duplicate-face ((t (:underline t :bold t :foreground "Gold3")))) + (flyspell-incorrect-face ((t (:underline t :bold t :foreground "OrangeRed")))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:bold t :foreground "cyan")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-doc-face ((t (:bold t :foreground "red")))) + (font-lock-doc-string-face ((t (:bold t :foreground "red")))) + (font-lock-function-name-face ((t (:bold t :foreground "white")))) + (font-lock-keyword-face ((t (:bold t :foreground "yellow")))) + (font-lock-preprocessor-face ((t (:bold t :foreground "blue")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:bold t :foreground "magenta")))) + (font-lock-type-face ((t (:bold t :foreground "lightgreen")))) + (font-lock-variable-name-face ((t (:bold t :foreground "white")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (fringe ((t (:background "grey95")))) + (gdb-arrow-face ((t (:bold t :background "yellow" :foreground "red")))) + (gnus-cite-attribution-face ((t (:italic t)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-highlight-words ((t (:foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4")))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-picons-face ((t (:background "white" :foreground "black")))) + (gnus-picons-xbm-face ((t (:background "white" :foreground "black")))) + (gnus-signature-face ((t (:italic t)))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-summary-cancelled-face ((t (:foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-x-face ((t (:background "white" :foreground "black")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:size "12" :background "Gray80" :foreground "black")))) + (header-line ((t (:background "grey20" :foreground "grey90")))) + (highlight ((t (:bold t :background "yellow" :foreground "red")))) + (highlight-changes-delete-face ((t (:underline t :foreground "red")))) + (highlight-changes-face ((t (:foreground "red")))) + (highline-face ((t (:background "paleturquoise")))) + (holiday-face ((t (:background "pink")))) + (hyper-apropos-documentation ((t (:foreground "#aaaaaa")))) + (hyper-apropos-heading ((t (:bold t :foreground "#999999")))) + (hyper-apropos-hyperlink ((t (:foreground "Violet")))) + (hyper-apropos-major-heading ((t (:bold t :foreground "#ff0000")))) + (hyper-apropos-section-heading ((t (:italic t :bold t :foreground "#33aa55")))) + (hyper-apropos-warning ((t (:bold t :foreground "red")))) + (info-menu-5 ((t (:underline t)))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (isearch ((t (:background "paleturquoise")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (:italic t)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-db-active-breakpoint-face ((t (:background "red" :foreground "black")))) + (jde-db-requested-breakpoint-face ((t (:background "yellow" :foreground "black")))) + (jde-db-spec-breakpoint-face ((t (:background "green" :foreground "black")))) + (jde-java-font-lock-api-face ((t (:foreground "light goldenrod")))) + (jde-java-font-lock-bold-face ((t (:bold t)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "Aquamarine")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "light coral")))) + (jde-java-font-lock-italic-face ((t (:italic t)))) + (jde-java-font-lock-link-face ((t (:underline t :foreground "cadetblue")))) + (jde-java-font-lock-modifier-face ((t (:foreground "LightSteelBlue")))) + (jde-java-font-lock-number-face ((t (:foreground "LightSalmon")))) + (jde-java-font-lock-operator-face ((t (:foreground "medium blue")))) + (jde-java-font-lock-package-face ((t (:foreground "steelblue1")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68")))) + (magenta ((t (:foreground "magenta")))) + (makefile-space-face ((t (:background "hotpink")))) + (menu ((t (nil)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:bold t :foreground "cyan")))) + (message-separator-face ((t (:foreground "brown")))) + (minibuffer-prompt ((t (:foreground "cyan")))) + (mode-line ((t (:background "grey75" :foreground "black")))) + (mode-line-inactive ((t (:background "grey30" :foreground "grey80")))) + (modeline ((t (:bold t :background "red" :foreground "yellow")))) + (modeline-buffer-id ((t (:bold t :background "red" :foreground "yellow")))) + (modeline-mousable ((t (:background "red" :foreground "yellow")))) + (modeline-mousable-minor-mode ((t (:background "red" :foreground "green4")))) + (mouse ((t (nil)))) + (paren-blink-off ((t (:foreground "black")))) + (paren-match ((t (:bold t :background "yellow" :foreground "red")))) + (paren-mismatch ((t (:background "DeepPink")))) + (pointer ((t (nil)))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "gray75")))) + (right-margin ((t (nil)))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (semantic-dirty-token-face ((t (:background "lightyellow")))) + (semantic-unmatched-syntax-face ((t (nil)))) + (senator-intangible-face ((t (:foreground "gray75")))) + (senator-momentary-highlight-face ((t (:background "gray30")))) + (senator-read-only-face ((t (:background "#664444")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:underline t :foreground "red")))) + (speedbar-tag-face ((t (:foreground "brown")))) + (template-message-face ((t (:bold t)))) + (term-black ((t (:foreground "black")))) + (term-blackbg ((t (nil)))) + (term-blue ((t (:foreground "blue")))) + (term-blue-bold-face ((t (:bold t :foreground "blue")))) + (term-blue-face ((t (:foreground "blue")))) + (term-blue-inv-face ((t (:background "blue")))) + (term-blue-ul-face ((t (:underline t :foreground "blue")))) + (term-bluebg ((t (:background "blue")))) + (term-bold ((t (:bold t)))) + (term-cyan ((t (:foreground "cyan")))) + (term-cyan-bold-face ((t (:bold t :foreground "cyan")))) + (term-cyan-face ((t (:foreground "cyan")))) + (term-cyan-inv-face ((t (:background "cyan")))) + (term-cyan-ul-face ((t (:underline t :foreground "cyan")))) + (term-cyanbg ((t (:background "cyan")))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-bold-face ((t (:bold t)))) + (term-default-face ((t (nil)))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-default-inv-face ((t (:background "peachpuff" :foreground "black")))) + (term-default-ul-face ((t (:underline t)))) + (term-green ((t (:foreground "green")))) + (term-green-bold-face ((t (:bold t :foreground "green")))) + (term-green-face ((t (:foreground "green")))) + (term-green-inv-face ((t (:background "green")))) + (term-green-ul-face ((t (:underline t :foreground "green")))) + (term-greenbg ((t (:background "green")))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (:foreground "magenta")))) + (term-magenta-bold-face ((t (:bold t :foreground "magenta")))) + (term-magenta-face ((t (:foreground "magenta")))) + (term-magenta-inv-face ((t (:background "magenta")))) + (term-magenta-ul-face ((t (:underline t :foreground "magenta")))) + (term-magentabg ((t (:background "magenta")))) + (term-red ((t (:foreground "red")))) + (term-red-bold-face ((t (:bold t :foreground "red")))) + (term-red-face ((t (:foreground "red")))) + (term-red-inv-face ((t (:background "red")))) + (term-red-ul-face ((t (:underline t :foreground "red")))) + (term-redbg ((t (:background "red")))) + (term-underline ((t (:underline t)))) + (term-white ((t (:foreground "white")))) + (term-white-bold-face ((t (:bold t :foreground "white")))) + (term-white-face ((t (:foreground "white")))) + (term-white-inv-face ((t (nil)))) + (term-white-ul-face ((t (:underline t :foreground "white")))) + (term-whitebg ((t (:background "white")))) + (term-yellow ((t (:foreground "yellow")))) + (term-yellow-bold-face ((t (:bold t :foreground "yellow")))) + (term-yellow-face ((t (:foreground "yellow")))) + (term-yellow-inv-face ((t (:background "yellow")))) + (term-yellow-ul-face ((t (:underline t :foreground "yellow")))) + (term-yellowbg ((t (:background "yellow")))) + (text-cursor ((t (:background "red" :foreground "black")))) + (tool-bar ((t (:background "grey75" :foreground "black")))) + (toolbar ((t (:background "Gray80" :foreground "black")))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (nil)))) + (vcursor ((t (:underline t :background "cyan" :foreground "blue")))) + (vertical-divider ((t (:background "Gray80" :foreground "black")))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red")))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange")))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:underline t :foreground "Blue")))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:underline t :foreground "DarkGoldenrod")))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:underline t :foreground "ForestGreen")))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:underline t :foreground "Brown")))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:underline t :foreground "Grey50")))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (white ((t (:foreground "white")))) + (widget ((t (:size "12" :background "Gray80" :foreground "black")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (nil)))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (x-face ((t (:bold t :background "wheat" :foreground "black")))) + (xrdb-option-name-face ((t (:bold t :foreground "yellow")))) + (xrdb-option-value-face ((t (:bold t :foreground "magenta")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "white" :foreground "black"))))))) + +(defun color-theme-shaman () + "Color theme by shaman, created 2002-11-11." + (interactive) + (color-theme-install + '(color-theme-shaman + ((background-color . "#456345") + (background-mode . dark) + (background-toolbar-color . "#cf3ccf3ccf3c") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#79e77df779e7") + (foreground-color . "White") + (top-toolbar-shadow-color . "#f7defbeef7de")) + ((buffers-tab-face . buffers-tab)) + (default ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t :size "12")))) + (bold-italic ((t (:italic t :bold t :size "12")))) + (border-glyph ((t (nil)))) + (buffers-tab ((t (:background "Gray80" :foreground "black")))) + (font-lock-builtin-face ((t (:foreground "cadetblue2")))) + (font-lock-comment-face ((t (:foreground "gray80")))) + (font-lock-constant-face ((t (:foreground "steelblue1")))) + (font-lock-doc-face ((t (:foreground "light coral")))) + (font-lock-doc-string-face ((t (:foreground "light coral")))) + (font-lock-function-name-face ((t (:foreground "aquamarine")))) + (font-lock-keyword-face ((t (:foreground "cyan")))) + (font-lock-preprocessor-face ((t (:foreground "steelblue1")))) + (font-lock-reference-face ((t (:foreground "cadetblue2")))) + (font-lock-string-face ((t (:foreground "tan")))) + (font-lock-type-face ((t (:foreground "wheat")))) + (font-lock-variable-name-face ((t (:foreground "cyan3")))) + (font-lock-warning-face ((t (:bold t :size "12" :foreground "Pink")))) + (fringe ((t (nil)))) + (gnus-x-face ((t (:background "white" :foreground "black")))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75" :foreground "black")))) + (gui-element ((t (:size "12" :background "Gray80" :foreground "black")))) + (highlight ((t (:background "darkseagreen2")))) + (isearch ((t (:background "paleturquoise")))) + (isearch-secondary ((t (:foreground "red3")))) + (italic ((t (:italic t :size "12")))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68")))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:bold t :foreground "green4")))) + (message-header-name-face ((t (:foreground "DarkGreen")))) + (message-header-newsgroups-face ((t (:bold t :foreground "yellow")))) + (message-header-other-face ((t (:foreground "#b00000")))) + (message-header-subject-face ((t (:foreground "green3")))) + (message-header-to-face ((t (:bold t :foreground "green2")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "blue3")))) + (mode-line ((t (:background "Gray80" :foreground "black")))) + (modeline ((t (:background "Gray80" :foreground "black")))) + (modeline-buffer-id ((t (:background "Gray80" :foreground "blue4")))) + (modeline-mousable ((t (:background "Gray80" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "Gray80" :foreground "green4")))) + (pointer ((t (:foreground "White")))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "gray65")))) + (right-margin ((t (nil)))) + (rpm-spec-dir-face ((t (:foreground "green")))) + (rpm-spec-doc-face ((t (:foreground "magenta")))) + (rpm-spec-ghost-face ((t (:foreground "red")))) + (rpm-spec-macro-face ((t (:foreground "yellow")))) + (rpm-spec-package-face ((t (:foreground "red")))) + (rpm-spec-tag-face ((t (:foreground "blue")))) + (rpm-spec-var-face ((t (:foreground "maroon")))) + (secondary-selection ((t (:background "paleturquoise")))) + (text-cursor ((t (:background "Pink" :foreground "Black")))) + (tool-bar ((t (nil)))) + (toolbar ((t (:background "Gray80" :foreground "black")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (:background "Gray80" :foreground "black")))) + (widget ((t (:size "12" :background "Gray80" :foreground "black")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "gray65"))))))) + +(defun color-theme-emacs-nw () + "Follow emacs21's color-theme, with -nw getting 100% compatibility. + +Alex's `color-theme-emacs-21' follows emacs21's theme, but in the +current scheme of things, that means that when it works on X, it won't +work in -nw perfectly. The modeline and menuline will have same +colors as the rest of emacs, which can be particularly disturbing when +there are multiple windows. + +OTOH, `color-theme-emacs-nw' follows emacs21's theme but the goal is +100% -nw compatibility, and in X; we shall try for decent color +scheme, and as much compability default emacs21's X as possble. +Bugs to deego@gnufans.org. + +TODO: Try to make this theme relative to color-theme-emacs-21 rather +than absolute, viz: call that first and then tweak minor stuff." + (interactive) + (color-theme-install + '(color-theme-emacs-nw + ((background-color . "white") + (background-mode . light) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "black") + (mouse-color . "black")) + ((Man-overstrike-face . bold) + (Man-underline-face . underline) + (cperl-here-face . font-lock-string-face) + (cperl-invalid-face . underline) + (cperl-pod-face . font-lock-comment-face) + (cperl-pod-head-face . font-lock-variable-name-face) + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-cite-attribution-face . gnus-cite-attribution-face) + (gnus-mouse-face . highlight) + (gnus-signature-face . gnus-signature-face) + (gnus-summary-selected-face . gnus-summary-selected-face) + (help-highlight-face . underline) + (idlwave-class-arrow-face . bold) + (idlwave-shell-breakpoint-face . idlwave-shell-bp-face) + (idlwave-shell-expression-face . secondary-selection) + (idlwave-shell-stop-line-face . highlight) + (ispell-highlight-face . highlight) + (list-matching-lines-face . bold) + (view-highlight-face . highlight) + (viper-insert-state-cursor-color . "Green") + (viper-replace-overlay-cursor-color . "Red") + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (Info-title-1-face ((t (:bold t :weight bold :family "helv" :height 1.728)))) + (Info-title-2-face ((t (:bold t :family "helv" :weight bold :height 1.44)))) + (Info-title-3-face ((t (:bold t :weight bold :family "helv" :height 1.2)))) + (Info-title-4-face ((t (:bold t :family "helv" :weight bold)))) + (antlr-font-lock-keyword-face ((t (:bold t :foreground "black" :weight bold)))) + (antlr-font-lock-literal-face ((t (:bold t :foreground "brown4" :weight bold)))) + (antlr-font-lock-ruledef-face ((t (:bold t :foreground "blue" :weight bold)))) + (antlr-font-lock-ruleref-face ((t (:foreground "blue4")))) + (antlr-font-lock-tokendef-face ((t (:bold t :foreground "blue" :weight bold)))) + (antlr-font-lock-tokenref-face ((t (:foreground "orange4")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (calendar-today-face ((t (:underline t)))) + (change-log-acknowledgement-face ((t (:foreground "Firebrick")))) + (change-log-conditionals-face ((t (:foreground "DarkGoldenrod")))) + (change-log-date-face ((t (:foreground "RosyBrown")))) + (change-log-email-face ((t (:foreground "DarkGoldenrod")))) + (change-log-file-face ((t (:foreground "Blue")))) + (change-log-function-face ((t (:foreground "DarkGoldenrod")))) + (change-log-list-face ((t (:foreground "Purple")))) + (change-log-name-face ((t (:foreground "CadetBlue")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "dark blue")))) + (cperl-array-face ((t (:bold t :background "lightyellow2" :foreground "Blue" :weight bold)))) + (cperl-hash-face ((t (:italic t :bold t :background "lightyellow2" :foreground "Red" :slant italic :weight bold)))) + (cperl-nonoverridable-face ((t (:foreground "chartreuse3")))) + (cursor ((t (:background "black")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "gray85")))) + (custom-comment-tag-face ((t (:foreground "blue4")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:bold t :foreground "blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "red" :weight bold :height 1.2)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "blue" :weight bold :height 1.2)))) + (cvs-filename-face ((t (:foreground "blue4")))) + (cvs-handled-face ((t (:foreground "pink")))) + (cvs-header-face ((t (:bold t :foreground "blue4" :weight bold)))) + (cvs-marked-face ((t (:bold t :foreground "green3" :weight bold)))) + (cvs-msg-face ((t (:italic t :slant italic)))) + (cvs-need-action-face ((t (:foreground "orange")))) + (cvs-unknown-face ((t (:foreground "red")))) + (diary-face ((t (:foreground "red")))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (:foreground "grey50")))) + (diff-file-header-face ((t (:bold t :background "grey70" :weight bold)))) + (diff-function-face ((t (:foreground "grey50")))) + (diff-header-face ((t (:background "grey85")))) + (diff-hunk-header-face ((t (:background "grey85")))) + (diff-index-face ((t (:bold t :weight bold :background "grey70")))) + (diff-nonexistent-face ((t (:bold t :weight bold :background "grey70")))) + (diff-removed-face ((t (nil)))) + (dired-face-boring ((t (:foreground "RosyBrown")))) + (dired-face-directory ((t (:foreground "Blue")))) + (dired-face-executable ((t (nil)))) + (dired-face-flagged ((t (:foreground "Red" :weight bold)))) + (dired-face-marked ((t (:foreground "Red" :weight bold)))) + (dired-face-permissions ((t (nil)))) + (dired-face-setuid ((t (nil)))) + (dired-face-socket ((t (nil)))) + (dired-face-symlink ((t (:foreground "Purple")))) + (ebrowse-default-face ((t (nil)))) + (ebrowse-file-name-face ((t (:italic t :slant italic)))) + (ebrowse-member-attribute-face ((t (:foreground "red")))) + (ebrowse-member-class-face ((t (:foreground "purple")))) + (ebrowse-progress-face ((t (:background "blue")))) + (ebrowse-root-class-face ((t (:bold t :foreground "blue" :weight bold)))) + (ebrowse-tree-mark-face ((t (:foreground "red")))) + (ediff-current-diff-face-A ((t (:background "pale green" :foreground "firebrick")))) + (ediff-current-diff-face-Ancestor ((t (:background "VioletRed" :foreground "Black")))) + (ediff-current-diff-face-B ((t (:background "Yellow" :foreground "DarkOrchid")))) + (ediff-current-diff-face-C ((t (:background "Pink" :foreground "Navy")))) + (ediff-even-diff-face-A ((t (:background "light grey" :foreground "Black")))) + (ediff-even-diff-face-Ancestor ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-B ((t (:background "Grey" :foreground "White")))) + (ediff-even-diff-face-C ((t (:background "light grey" :foreground "Black")))) + (ediff-fine-diff-face-A ((t (:background "sky blue" :foreground "Navy")))) + (ediff-fine-diff-face-Ancestor ((t (:background "Green" :foreground "Black")))) + (ediff-fine-diff-face-B ((t (:background "cyan" :foreground "Black")))) + (ediff-fine-diff-face-C ((t (:background "Turquoise" :foreground "Black")))) + (ediff-odd-diff-face-A ((t (:background "Grey" :foreground "White")))) + (ediff-odd-diff-face-Ancestor ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-B ((t (:background "light grey" :foreground "Black")))) + (ediff-odd-diff-face-C ((t (:background "Grey" :foreground "White")))) + (eshell-ls-archive-face ((t (:bold t :foreground "Orchid" :weight bold)))) + (eshell-ls-backup-face ((t (:foreground "OrangeRed")))) + (eshell-ls-clutter-face ((t (:bold t :foreground "OrangeRed" :weight bold)))) + (eshell-ls-directory-face ((t (:bold t :foreground "Blue" :weight bold)))) + (eshell-ls-executable-face ((t (:bold t :foreground "ForestGreen" :weight bold)))) + (eshell-ls-missing-face ((t (:bold t :foreground "Red" :weight bold)))) + (eshell-ls-product-face ((t (:foreground "OrangeRed")))) + (eshell-ls-readonly-face ((t (:foreground "Brown")))) + (eshell-ls-special-face ((t (:bold t :foreground "Magenta" :weight bold)))) + (eshell-ls-symlink-face ((t (:bold t :foreground "Dark Cyan" :weight bold)))) + (eshell-ls-unreadable-face ((t (:foreground "Grey30")))) + (eshell-prompt-face ((t (:bold t :foreground "Red" :weight bold)))) + (eshell-test-failed-face ((t (:bold t :foreground "OrangeRed" :weight bold)))) + (eshell-test-ok-face ((t (:bold t :foreground "Green" :weight bold)))) + (excerpt ((t (:italic t :slant italic)))) + (fixed ((t (:bold t :weight bold)))) + (fixed-pitch ((t (:family "courier")))) + (flyspell-duplicate-face ((t (:bold t :foreground "Gold3" :underline t :weight bold)))) + (flyspell-incorrect-face ((t (:bold t :foreground "OrangeRed" :underline t :weight bold)))) + (font-lock-builtin-face ((t (:foreground "Orchid")))) + (font-lock-comment-face ((t (:foreground "Firebrick")))) + (font-lock-constant-face ((t (:foreground "CadetBlue")))) + (font-lock-doc-face ((t (:foreground "RosyBrown")))) + (font-lock-doc-string-face ((t (:foreground "RosyBrown")))) + (font-lock-function-name-face ((t (:foreground "Blue")))) + (font-lock-keyword-face ((t (:foreground "Purple")))) + (font-lock-preprocessor-face ((t (:foreground "CadetBlue")))) + (font-lock-reference-face ((t (:foreground "Orchid")))) + (font-lock-string-face ((t (:foreground "RosyBrown")))) + (font-lock-type-face ((t (:foreground "ForestGreen")))) + (font-lock-variable-name-face ((t (:foreground "DarkGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Red" :weight bold)))) + (fringe ((t (:background "grey95")))) + (gnus-cite-attribution-face ((t (:italic t :slant italic)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t :weight bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t :slant italic)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t :weight bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t :slant italic)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4" :weight bold)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :weight bold)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t :weight bold)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t :weight bold)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen" :weight bold)))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4" :slant italic)))) + (gnus-header-from-face ((t (:foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:italic t :foreground "MidnightBlue" :slant italic)))) + (gnus-header-subject-face ((t (:foreground "red4")))) + (gnus-signature-face ((t (:italic t :slant italic)))) + (gnus-splash-face ((t (:foreground "Brown")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "firebrick" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue" :slant italic)))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen" :slant italic)))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick" :slant italic)))) + (gnus-summary-low-unread-face ((t (:italic t :slant italic)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "firebrick")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (header-line ((t (:box (:line-width -1 :style released-button) :background "grey90" :foreground "grey20" :box nil)))) + (hi-black-b ((t (:bold t :weight bold)))) + (hi-black-hb ((t (:bold t :family "helv" :weight bold :height 1.67)))) + (hi-blue ((t (:background "light blue")))) + (hi-blue-b ((t (:bold t :foreground "blue" :weight bold)))) + (hi-green ((t (:background "green")))) + (hi-green-b ((t (:bold t :foreground "green" :weight bold)))) + (hi-pink ((t (:background "pink")))) + (hi-red-b ((t (:bold t :foreground "red" :weight bold)))) + (hi-yellow ((t (:background "yellow")))) + (highlight ((t (:background "darkseagreen2")))) + (highlight-changes-delete-face ((t (:foreground "red" :underline t)))) + (highlight-changes-face ((t (:foreground "red")))) + (holiday-face ((t (:background "pink")))) + (idlwave-help-link-face ((t (:foreground "Blue")))) + (idlwave-shell-bp-face ((t (:background "Pink" :foreground "Black")))) + (info-header-node ((t (:italic t :bold t :weight bold :slant italic :foreground "brown")))) + (info-header-xref ((t (:bold t :weight bold :foreground "magenta4")))) + (info-menu-5 ((t (:foreground "red1")))) + (info-menu-header ((t (:bold t :family "helv" :weight bold)))) + (info-node ((t (:italic t :bold t :foreground "brown" :slant italic :weight bold)))) + (info-xref ((t (:bold t :foreground "magenta4" :weight bold)))) + (isearch ((t (:background "magenta4" :foreground "lightskyblue1")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise")))) + (italic ((t (:italic t :slant italic)))) + (log-view-file-face ((t (:bold t :background "grey70" :weight bold)))) + (log-view-message-face ((t (:background "grey85")))) + (makefile-space-face ((t (:background "hotpink")))) + (menu ((t (:background "grey50" :foreground "white" :box (:line-width -1 :style released-button))))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue" :weight bold)))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue" :weight bold)))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (mode-line ((t (:background "grey50" :foreground "white" :box (:line-width -1 :style released-button))))) + (modeline ((t (:background "grey50" :foreground "white" :box (:line-width -1 :style released-button))))) + (modeline-buffer-id ((t (:bold t :background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (modeline-mousable ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (modeline-mousable-minor-mode ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (mouse ((t (:background "black")))) + (primary-selection ((t (:background "lightgoldenrod2")))) + (reb-match-0 ((t (:background "lightblue")))) + (reb-match-1 ((t (:background "aquamarine")))) + (reb-match-2 ((t (:background "springgreen")))) + (reb-match-3 ((t (:background "yellow")))) + (region ((t (:background "lightgoldenrod2")))) + (scroll-bar ((t (:background "grey75")))) + (secondary-selection ((t (:background "yellow")))) + (sh-heredoc-face ((t (:foreground "tan")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (show-tabs-space-face ((t (:foreground "yellow")))) + (show-tabs-tab-face ((t (:foreground "red")))) + (smerge-base-face ((t (:foreground "red")))) + (smerge-markers-face ((t (:background "grey85")))) + (smerge-mine-face ((t (:foreground "blue")))) + (smerge-other-face ((t (:foreground "darkgreen")))) + (speedbar-button-face ((t (:foreground "green4")))) + (speedbar-directory-face ((t (:foreground "blue4")))) + (speedbar-file-face ((t (:foreground "cyan4")))) + (speedbar-highlight-face ((t (:background "green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-tag-face ((t (:foreground "brown")))) + (strokes-char-face ((t (:background "lightgray")))) + (term-black ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-blackbg ((t (:stipple nil :background "black" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-blue ((t (:stipple nil :background "white" :foreground "blue" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-bluebg ((t (:stipple nil :background "blue" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-bold ((t (:bold t :stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight bold :width normal :family "adobe-courier")))) + (term-cyan ((t (:stipple nil :background "white" :foreground "cyan" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-cyanbg ((t (:stipple nil :background "cyan" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-bg ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-bg-inv ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-fg ((t (:stipple nil :background "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-default-fg-inv ((t (:stipple nil :background "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-green ((t (:stipple nil :background "white" :foreground "green" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-greenbg ((t (:stipple nil :background "green" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-invisible ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-invisible-inv ((t (:stipple nil :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-magenta ((t (:stipple nil :background "white" :foreground "magenta" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-magentabg ((t (:stipple nil :background "magenta" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-red ((t (:stipple nil :background "white" :foreground "red" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-redbg ((t (:stipple nil :background "red" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-underline ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline t :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-white ((t (:stipple nil :background "white" :foreground "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-whitebg ((t (:stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-yellow ((t (:stipple nil :background "white" :foreground "yellow" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (term-yellowbg ((t (:stipple nil :background "yellow" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :width normal :family "adobe-courier")))) + (tex-math-face ((t (:foreground "RosyBrown")))) + (texinfo-heading-face ((t (:foreground "Blue")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (vcursor ((t (:background "cyan" :foreground "blue" :underline t)))) + (vhdl-font-lock-attribute-face ((t (:foreground "Orchid")))) + (vhdl-font-lock-directive-face ((t (:foreground "CadetBlue")))) + (vhdl-font-lock-enumvalue-face ((t (:foreground "Gold4")))) + (vhdl-font-lock-function-face ((t (:foreground "Orchid4")))) + (vhdl-font-lock-prompt-face ((t (:bold t :foreground "Red" :weight bold)))) + (vhdl-font-lock-reserved-words-face ((t (:bold t :foreground "Orange" :weight bold)))) + (vhdl-font-lock-translate-off-face ((t (:background "LightGray")))) + (vhdl-speedbar-architecture-face ((t (:foreground "Blue")))) + (vhdl-speedbar-architecture-selected-face ((t (:foreground "Blue" :underline t)))) + (vhdl-speedbar-configuration-face ((t (:foreground "DarkGoldenrod")))) + (vhdl-speedbar-configuration-selected-face ((t (:foreground "DarkGoldenrod" :underline t)))) + (vhdl-speedbar-entity-face ((t (:foreground "ForestGreen")))) + (vhdl-speedbar-entity-selected-face ((t (:foreground "ForestGreen" :underline t)))) + (vhdl-speedbar-instantiation-face ((t (:foreground "Brown")))) + (vhdl-speedbar-instantiation-selected-face ((t (:foreground "Brown" :underline t)))) + (vhdl-speedbar-package-face ((t (:foreground "Grey50")))) + (vhdl-speedbar-package-selected-face ((t (:foreground "Grey50" :underline t)))) + (viper-minibuffer-emacs-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-minibuffer-insert-face ((t (:background "pink" :foreground "Black")))) + (viper-minibuffer-vi-face ((t (:background "grey" :foreground "DarkGreen")))) + (viper-replace-overlay-face ((t (:background "darkseagreen2" :foreground "Black")))) + (viper-search-face ((t (:background "khaki" :foreground "Black")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85")))) + (woman-addition-face ((t (:foreground "orange")))) + (woman-bold-face ((t (:bold t :foreground "blue" :weight bold)))) + (woman-italic-face ((t (:italic t :foreground "red" :underline t :slant italic)))) + (woman-unknown-face ((t (:foreground "brown")))) + (zmacs-region ((t (:background "lightgoldenrod2"))))))) + +(defun color-theme-late-night () + "Color theme by Alex Schroeder, created 2003-08-07. +This theme is for use late at night, with only little light in the room. +The goal was to make something as dark and subtle as the text console in +its default 80x25 state -- dark grey on black." + (interactive) + (let ((color-theme-is-cumulative t)) + (color-theme-dark-erc) + (color-theme-dark-gnus) + ;; (color-theme-dark-diff) + ;; (color-theme-dark-eshell) + (color-theme-dark-info) + (color-theme-dark-font-lock) + (color-theme-install + '(color-theme-late-night + ((background-color . "#000") + (background-mode . dark) + (background-toolbar-color . "#000") + (border-color . "#000") + (bottom-toolbar-shadow-color . "#000") + (cursor-color . "#888") + (foreground-color . "#666") + (top-toolbar-shadow-color . "#111")) + (default ((t (nil)))) + (bold ((t (:bold t)))) + (button ((t (:bold t)))) + (custom-button-face ((t (:bold t :foreground "#999")))) + (fringe ((t (:background "#111" :foreground "#444")))) + (header-line ((t (:background "#333" :foreground "#000")))) + (highlight ((t (:background "dark slate blue" :foreground "light blue")))) + (holiday-face ((t (:background "#000" :foreground "#777")))) + (isearch ((t (:foreground "pink" :background "red")))) + (isearch-lazy-highlight-face ((t (:foreground "red")))) + (italic ((t (:bold t)))) + (menu ((t (:background "#111" :foreground "#444")))) + (minibuffer-prompt ((t (:foreground "555")))) + (modeline ((t (:background "#111" :foreground "#444")))) + (mode-line-inactive ((t (:background "#000" :foreground "#444")))) + (modeline-buffer-id ((t (:background "#000" :foreground "#555")))) + (modeline-mousable ((t (:background "#000" :foreground "#555")))) + (modeline-mousable-minor-mode ((t (:background "#000" :foreground "#555")))) + (region ((t (:background "dark cyan" :foreground "cyan")))) + (secondary-selection ((t (:background "Aquamarine" :foreground "SlateBlue")))) + (show-paren-match-face ((t (:foreground "white" :background "light slate blue")))) + (show-paren-mismatch-face ((t (:foreground "white" :background "red")))) + (tool-bar ((t (:background "#111" :foreground "#777")))) + (tooltip ((t (:background "#333" :foreground "#777")))) + (underline ((t (:bold t)))) + (variable-pitch ((t (nil)))) + (widget-button-face ((t (:bold t :foreground "#888")))) + (widget-field-face ((t (:bold t :foreground "#999")))))))) + +(defun color-theme-clarity () + "White on black color theme by Richard Wellum, created 2003-01-16." + (interactive) + (color-theme-install + '(color-theme-clarity + ((background-color . "black") + (background-mode . dark) + (border-color . "white") + (cursor-color . "yellow") + (foreground-color . "white") + (mouse-color . "white")) + ((CUA-mode-global-mark-cursor-color . "cyan") + (CUA-mode-normal-cursor-color . "yellow") + (CUA-mode-overwrite-cursor-color . "red") + (CUA-mode-read-only-cursor-color . "green") + (help-highlight-face . underline) + (ibuffer-dired-buffer-face . font-lock-function-name-face) + (ibuffer-help-buffer-face . font-lock-comment-face) + (ibuffer-hidden-buffer-face . font-lock-warning-face) + (ibuffer-occur-match-face . font-lock-warning-face) + (ibuffer-read-only-buffer-face . font-lock-type-face) + (ibuffer-special-buffer-face . font-lock-keyword-face) + (ibuffer-title-face . font-lock-type-face) + (list-matching-lines-face . bold) + (ps-line-number-color . "black") + (ps-zebra-color . 0.95) + (tags-tag-face . default) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (nil)))) + (CUA-global-mark-face ((t (:background "cyan" :foreground "black")))) + (CUA-rectangle-face ((t (:background "maroon" :foreground "white")))) + (CUA-rectangle-noselect-face ((t (:background "dimgray" :foreground "white")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "white")))) + (clearcase-dired-checkedout-face ((t (:foreground "red")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cursor ((t (:background "yellow")))) + (fixed-pitch ((t (:family "courier")))) + (flash-paren-face-off ((t (nil)))) + (flash-paren-face-on ((t (nil)))) + (flash-paren-face-region ((t (nil)))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:foreground "OrangeRed")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-doc-face ((t (:foreground "LightSalmon")))) + (font-lock-function-name-face ((t (:foreground "LightSkyBlue")))) + (font-lock-keyword-face ((t (:foreground "Cyan")))) + (font-lock-string-face ((t (:foreground "LightSalmon")))) + (font-lock-type-face ((t (:foreground "PaleGreen")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink" :weight bold)))) + (fringe ((t (:background "grey10")))) + (header-line ((t (:box (:line-width -1 :style released-button) :foreground "grey20" :background "grey90" :box nil)))) + (highlight ((t (:background "darkolivegreen")))) + (ibuffer-deletion-face ((t (:foreground "red")))) + (ibuffer-marked-face ((t (:foreground "green")))) + (isearch ((t (:background "palevioletred2" :foreground "brown4")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (menu ((t (nil)))) + (mode-line ((t (:foreground "yellow" :background "darkslateblue" :box (:line-width -1 :style released-button))))) + (mouse ((t (:background "white")))) + (region ((t (:background "blue")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "darkslateblue")))) + (show-block-face1 ((t (:background "gray10")))) + (show-block-face2 ((t (:background "gray15")))) + (show-block-face3 ((t (:background "gray20")))) + (show-block-face4 ((t (:background "gray25")))) + (show-block-face5 ((t (:background "gray30")))) + (show-block-face6 ((t (:background "gray35")))) + (show-block-face7 ((t (:background "gray40")))) + (show-block-face8 ((t (:background "gray45")))) + (show-block-face9 ((t (:background "gray50")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray"))))))) + +(defun color-theme-andreas () + "Color theme by Andreas Busch, created 2003-02-06." + (interactive) + (color-theme-install + '(color-theme-andreas + ((background-mode . light) + (background-color . "white") + (background-toolbar-color . "#cccccccccccc") + (border-color . "#000000000000") + (bottom-toolbar-shadow-color . "#7a7a7a7a7a7a") + (foreground-color . "black") + (top-toolbar-shadow-color . "#f5f5f5f5f5f5")) + ((gnus-mouse-face . highlight) + (ispell-highlight-face . highlight)) + (default ((t (nil)))) + (OrangeRed ((t (nil)))) + (blue ((t (:foreground "blue")))) + (bold ((t (:bold t)))) + (bold-italic ((t (:italic t :bold t)))) + (border-glyph ((t (nil)))) + (calendar-today-face ((t (:underline t)))) + (color-mode-face-@ ((t (:foreground "orange")))) + (color-mode-face-a ((t (:foreground "blue")))) + (color-mode-face-b ((t (:foreground "red")))) + (color-mode-face-c ((t (:foreground "green3")))) + (color-mode-face-d ((t (:background "red" :foreground "white")))) + (color-mode-face-e ((t (:background "orange" :foreground "blue")))) + (color-mode-face-f ((t (:background "blue" :foreground "yellow")))) + (color-mode-face-g ((t (:background "lightblue" :foreground "brown")))) + (color-mode-face-h ((t (:background "brown" :foreground "white")))) + (custom-button-face ((t (:bold t)))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:underline t :foreground "blue")))) + (custom-group-tag-face-1 ((t (:underline t :foreground "red")))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "dark green")))) + (custom-variable-button-face ((t (:underline t :bold t :background "gray90")))) + (custom-variable-tag-face ((t (:underline t :background "gray95" :foreground "blue")))) + (diary-face ((t (:foreground "red")))) + (display-time-mail-balloon-enhance-face ((t (:background "orange")))) + (display-time-mail-balloon-gnus-group-face ((t (:foreground "blue")))) + (display-time-time-balloon-face ((t (:foreground "red")))) + (emacs-wiki-bad-link-face ((t (:bold t :foreground "red")))) + (emacs-wiki-link-face ((t (:bold t :foreground "green")))) + (font-lock-comment-face ((t (:foreground "orange1")))) + (font-lock-doc-string-face ((t (:foreground "green4")))) + (font-lock-function-name-face ((t (:foreground "blue3")))) + (font-lock-keyword-face ((t (:foreground "red1")))) + (font-lock-preprocessor-face ((t (:foreground "blue3")))) + (font-lock-reference-face ((t (:foreground "red3")))) + (font-lock-string-face ((t (:foreground "green4")))) + (font-lock-type-face ((t (:foreground "#6920ac")))) + (font-lock-variable-name-face ((t (:foreground "blue3")))) + (font-lock-warning-face ((t (:bold t :foreground "Red")))) + (gnu-cite-face-3 ((t (nil)))) + (gnu-cite-face-4 ((t (nil)))) + (gnus-cite-attribution-face ((t (:underline t)))) + (gnus-cite-face-1 ((t (:foreground "MidnightBlue")))) + (gnus-cite-face-10 ((t (:foreground "medium purple")))) + (gnus-cite-face-11 ((t (:foreground "turquoise")))) + (gnus-cite-face-2 ((t (:foreground "firebrick")))) + (gnus-cite-face-3 ((t (:foreground "dark green")))) + (gnus-cite-face-4 ((t (:foreground "OrangeRed")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "dark violet")))) + (gnus-cite-face-7 ((t (:foreground "SteelBlue4")))) + (gnus-cite-face-8 ((t (:foreground "magenta")))) + (gnus-cite-face-9 ((t (:foreground "violet")))) + (gnus-emphasis-bold ((t (:bold t)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t)))) + (gnus-emphasis-italic ((t (:italic t)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:underline t :bold t)))) + (gnus-emphasis-underline-bold-italic ((t (:underline t :italic t :bold t)))) + (gnus-emphasis-underline-italic ((t (:underline t :italic t)))) + (gnus-group-mail-1-empty-face ((t (:foreground "DeepPink3")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "DeepPink3")))) + (gnus-group-mail-2-empty-face ((t (:foreground "HotPink3")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "HotPink3")))) + (gnus-group-mail-3-empty-face ((t (:foreground "magenta4")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "magenta4")))) + (gnus-group-mail-low-empty-face ((t (:foreground "DeepPink4")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "DeepPink4")))) + (gnus-group-news-1-empty-face ((t (:foreground "ForestGreen")))) + (gnus-group-news-1-face ((t (:bold t :foreground "ForestGreen")))) + (gnus-group-news-2-empty-face ((t (:foreground "CadetBlue4")))) + (gnus-group-news-2-face ((t (:bold t :foreground "CadetBlue4")))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t)))) + (gnus-group-news-low-empty-face ((t (:foreground "DarkGreen")))) + (gnus-group-news-low-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-header-content-face ((t (:italic t :foreground "indianred4")))) + (gnus-header-from-face ((t (:bold t :foreground "red3")))) + (gnus-header-name-face ((t (:foreground "maroon")))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "MidnightBlue")))) + (gnus-header-subject-face ((t (:bold t :foreground "red4")))) + (gnus-splash-face ((t (:foreground "red")))) + (gnus-summary-cancelled-face ((t (:background "black" :foreground "yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "RoyalBlue")))) + (gnus-summary-high-read-face ((t (:bold t :foreground "DarkGreen")))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "DarkRed")))) + (gnus-summary-high-unread-face ((t (:bold t)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "RoyalBlue")))) + (gnus-summary-low-read-face ((t (:italic t :foreground "DarkGreen")))) + (gnus-summary-low-ticked-face ((t (:italic t :foreground "firebrick")))) + (gnus-summary-low-unread-face ((t (:italic t)))) + (gnus-summary-normal-ancient-face ((t (:foreground "RoyalBlue")))) + (gnus-summary-normal-read-face ((t (:foreground "DarkGreen")))) + (gnus-summary-normal-ticked-face ((t (:foreground "Red")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (gnus-x-face ((t (nil)))) + (green ((t (:foreground "green")))) + (gui-button-face ((t (:background "grey75")))) + (gui-element ((t (:background "Gray80")))) + (highlight ((t (nil)))) + (holiday-face ((t (:background "pink")))) + (hyper-apropos-documentation ((t (:foreground "darkred")))) + (hyper-apropos-heading ((t (:bold t)))) + (hyper-apropos-hyperlink ((t (:foreground "blue4")))) + (hyper-apropos-major-heading ((t (:bold t)))) + (hyper-apropos-section-heading ((t (:italic t :bold t)))) + (hyper-apropos-warning ((t (:bold t :foreground "red")))) + (info-node ((t (:italic t :bold t)))) + (info-xref ((t (:bold t)))) + (isearch ((t (:background "yellow" :foreground "red")))) + (italic ((t (:italic t)))) + (kai-gnus-cite-face-1 ((t (:foreground "LightCyan4")))) + (kai-gnus-cite-face-2 ((t (:foreground "LightSkyBlue2")))) + (kai-gnus-cite-face-3 ((t (:foreground "DodgerBlue3")))) + (kai-gnus-group-mail-face ((t (:foreground "darkslategrey")))) + (kai-gnus-group-nonempty-mail-face ((t (:foreground "DarkRed")))) + (kai-gnus-group-starred-face ((t (:foreground "grey50")))) + (left-margin ((t (nil)))) + (list-mode-item-selected ((t (:background "gray68")))) + (message-cited-text ((t (:italic t)))) + (message-cited-text-face ((t (:foreground "red")))) + (message-header-cc-face ((t (:foreground "MidnightBlue")))) + (message-header-contents ((t (:italic t)))) + (message-header-name-face ((t (:foreground "cornflower blue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "blue4")))) + (message-header-other-face ((t (:foreground "steel blue")))) + (message-header-subject-face ((t (:bold t :foreground "navy blue")))) + (message-header-to-face ((t (:bold t :foreground "MidnightBlue")))) + (message-header-xheader-face ((t (:foreground "blue")))) + (message-headers ((t (:bold t)))) + (message-highlighted-header-contents ((t (:italic t :bold t)))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "brown")))) + (modeline ((t (:background "Gray75" :foreground "Black")))) + (modeline-buffer-id ((t (:background "Gray75" :foreground "blue4")))) + (modeline-mousable ((t (:background "Gray75" :foreground "firebrick")))) + (modeline-mousable-minor-mode ((t (:background "Gray75" :foreground "green4")))) + (paren-blink-off ((t (:foreground "gray80")))) + (paren-match ((t (:background "red" :foreground "white")))) + (paren-mismatch ((t (:background "DeepPink")))) + (pointer ((t (:foreground "blue")))) + (primary-selection ((t (:background "gray65")))) + (red ((t (:foreground "red")))) + (region ((t (:background "gray75")))) + (right-margin ((t (nil)))) + (secondary-selection ((t (:background "paleturquoise")))) + (text-cursor ((t (:background "red" :foreground "LightYellow1")))) + (toolbar ((t (:background "Gray80")))) + (underline ((t (:underline t)))) + (vertical-divider ((t (:background "Gray80")))) + (widget-button-face ((t (:bold t)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (x-face ((t (:background "white")))) + (yellow ((t (:foreground "yellow")))) + (zmacs-region ((t (:background "gray65" :foreground "yellow"))))))) + +(defun color-theme-charcoal-black () + "Color theme by Lars Chr. Hausmann, created 2003-03-24." + (interactive) + (color-theme-install + '(color-theme-charcoal-black + ((background-color . "Grey15") + (background-mode . dark) + (border-color . "Grey") + (cursor-color . "Grey") + (foreground-color . "Grey") + (mouse-color . "Grey")) + ((display-time-mail-face . mode-line) + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-mouse-face . highlight) + (gnus-server-agent-face . gnus-server-agent-face) + (gnus-server-closed-face . gnus-server-closed-face) + (gnus-server-denied-face . gnus-server-denied-face) + (gnus-server-offline-face . gnus-server-offline-face) + (gnus-server-opened-face . gnus-server-opened-face) + (gnus-signature-face . gnus-signature-face) + (gnus-summary-selected-face . gnus-summary-selected-face) + (help-highlight-face . underline) + (list-matching-lines-face . bold) + (mime-button-face . bold) + (mime-button-mouse-face . highlight) + (sgml-set-face . t) + (tags-tag-face . default) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "Grey15" :foreground "Grey" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 87 :width semi-condensed :family "misc-fixed")))) + (Info-title-1-face ((t (:bold t :weight bold :family "helv" :height 1.728)))) + (Info-title-2-face ((t (:bold t :family "helv" :weight bold :height 1.44)))) + (Info-title-3-face ((t (:bold t :weight bold :family "helv" :height 1.2)))) + (Info-title-4-face ((t (:bold t :family "helv" :weight bold)))) + (bg:erc-color-face0 ((t (nil)))) + (bg:erc-color-face1 ((t (nil)))) + (bg:erc-color-face10 ((t (nil)))) + (bg:erc-color-face11 ((t (nil)))) + (bg:erc-color-face12 ((t (nil)))) + (bg:erc-color-face13 ((t (nil)))) + (bg:erc-color-face14 ((t (nil)))) + (bg:erc-color-face15 ((t (nil)))) + (bg:erc-color-face2 ((t (nil)))) + (bg:erc-color-face3 ((t (nil)))) + (bg:erc-color-face4 ((t (nil)))) + (bg:erc-color-face5 ((t (nil)))) + (bg:erc-color-face6 ((t (nil)))) + (bg:erc-color-face7 ((t (nil)))) + (bg:erc-color-face8 ((t (nil)))) + (bg:erc-color-face9 ((t (nil)))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:bold t :foreground "beige" :weight bold)))) + (border ((t (:background "Grey")))) + (calendar-today-face ((t (:underline t)))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cperl-array-face ((t (:bold t :foreground "light salmon" :weight bold)))) + (cperl-hash-face ((t (:italic t :bold t :foreground "beige" :slant italic :weight bold)))) + (cperl-nonoverridable-face ((t (:foreground "aquamarine")))) + (cursor ((t (:background "Grey")))) + (custom-button-face ((t (:foreground "gainsboro")))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "dim gray")))) + (custom-comment-tag-face ((t (:foreground "gray80")))) + (custom-documentation-face ((t (:foreground "light blue")))) + (custom-face-tag-face ((t (:underline t)))) + (custom-group-tag-face ((t (:bold t :foreground "pale turquoise" :weight bold)))) + (custom-group-tag-face-1 ((t (:foreground "pale turquoise" :underline t)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "light salmon")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (diary-face ((t (:foreground "red")))) + (dired-face-directory ((t (:bold t :foreground "sky blue" :weight bold)))) + (dired-face-executable ((t (:foreground "green yellow")))) + (dired-face-flagged ((t (:foreground "tomato")))) + (dired-face-marked ((t (:foreground "light salmon")))) + (dired-face-permissions ((t (:foreground "aquamarine")))) + (erc-action-face ((t (nil)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "pale green")))) + (erc-error-face ((t (:bold t :foreground "IndianRed" :weight bold)))) + (erc-highlight-face ((t (:bold t :foreground "pale green" :weight bold)))) + (erc-input-face ((t (:foreground "light blue")))) + (erc-inverse-face ((t (:background "steel blue")))) + (erc-notice-face ((t (:foreground "light salmon")))) + (erc-pal-face ((t (:foreground "pale green")))) + (erc-prompt-face ((t (:bold t :foreground "light blue" :weight bold)))) + (eshell-ls-archive-face ((t (:bold t :foreground "medium purple" :weight bold)))) + (eshell-ls-backup-face ((t (:foreground "dim gray")))) + (eshell-ls-clutter-face ((t (:foreground "dim gray")))) + (eshell-ls-directory-face ((t (:bold t :foreground "medium slate blue" :weight bold)))) + (eshell-ls-executable-face ((t (:bold t :foreground "aquamarine" :weight bold)))) + (eshell-ls-missing-face ((t (:foreground "black")))) + (eshell-ls-picture-face ((t (:foreground "violet")))) + (eshell-ls-product-face ((t (:foreground "light steel blue")))) + (eshell-ls-readonly-face ((t (:foreground "aquamarine")))) + (eshell-ls-special-face ((t (:foreground "gold")))) + (eshell-ls-symlink-face ((t (:foreground "white")))) + (eshell-ls-unreadable-face ((t (:foreground "dim gray")))) + (eshell-prompt-face ((t (:bold t :foreground "light sky blue" :weight bold)))) + (excerpt ((t (:italic t :slant italic)))) + (fg:erc-color-face0 ((t (:foreground "white")))) + (fg:erc-color-face1 ((t (:foreground "beige")))) + (fg:erc-color-face10 ((t (:foreground "pale goldenrod")))) + (fg:erc-color-face11 ((t (:foreground "light goldenrod yellow")))) + (fg:erc-color-face12 ((t (:foreground "light yellow")))) + (fg:erc-color-face13 ((t (:foreground "yellow")))) + (fg:erc-color-face14 ((t (:foreground "light goldenrod")))) + (fg:erc-color-face15 ((t (:foreground "lime green")))) + (fg:erc-color-face2 ((t (:foreground "lemon chiffon")))) + (fg:erc-color-face3 ((t (:foreground "light cyan")))) + (fg:erc-color-face4 ((t (:foreground "powder blue")))) + (fg:erc-color-face5 ((t (:foreground "sky blue")))) + (fg:erc-color-face6 ((t (:foreground "dark sea green")))) + (fg:erc-color-face7 ((t (:foreground "pale green")))) + (fg:erc-color-face8 ((t (:foreground "medium spring green")))) + (fg:erc-color-face9 ((t (:foreground "khaki")))) + (fixed ((t (:bold t :weight bold)))) + (fixed-pitch ((t (:family "courier")))) + (flyspell-duplicate-face ((t (:bold t :foreground "Gold3" :underline t :weight bold)))) + (flyspell-incorrect-face ((t (:bold t :foreground "OrangeRed" :underline t :weight bold)))) + (font-lock-builtin-face ((t (:foreground "aquamarine")))) + (font-lock-comment-face ((t (:foreground "light blue")))) + (font-lock-constant-face ((t (:foreground "pale green")))) + (font-lock-doc-face ((t (:foreground "light sky blue")))) + (font-lock-doc-string-face ((t (:foreground "sky blue")))) + (font-lock-function-name-face ((t (:bold t :foreground "aquamarine" :weight bold)))) + (font-lock-keyword-face ((t (:bold t :foreground "pale turquoise" :weight bold)))) + (font-lock-reference-face ((t (:foreground "pale green")))) + (font-lock-string-face ((t (:foreground "light sky blue")))) + (font-lock-type-face ((t (:bold t :foreground "sky blue" :weight bold)))) + (font-lock-variable-name-face ((t (:bold t :foreground "turquoise" :weight bold)))) + (font-lock-warning-face ((t (:bold t :foreground "Red" :weight bold)))) + (fringe ((t (:background "Grey15")))) + (gnus-cite-face-1 ((t (:foreground "LightSalmon")))) + (gnus-cite-face-2 ((t (:foreground "Khaki")))) + (gnus-cite-face-3 ((t (:foreground "Coral")))) + (gnus-cite-face-4 ((t (:foreground "yellow green")))) + (gnus-cite-face-5 ((t (:foreground "dark khaki")))) + (gnus-cite-face-6 ((t (:foreground "bisque")))) + (gnus-cite-face-7 ((t (:foreground "peru")))) + (gnus-cite-face-8 ((t (:foreground "light coral")))) + (gnus-cite-face-9 ((t (:foreground "plum")))) + (gnus-emphasis-bold ((t (:bold t :weight bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) + (gnus-emphasis-italic ((t (:italic t :slant italic)))) + (gnus-emphasis-strikethru ((t (nil)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t :weight bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t :slant italic)))) + (gnus-group-mail-1-empty-face ((t (:foreground "White")))) + (gnus-group-mail-1-face ((t (:bold t :foreground "White" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (:foreground "light cyan")))) + (gnus-group-mail-2-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (:foreground "LightBlue")))) + (gnus-group-mail-3-face ((t (:bold t :foreground "LightBlue" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (:foreground "Aquamarine")))) + (gnus-group-mail-low-face ((t (:bold t :foreground "Aquamarine" :weight bold)))) + (gnus-group-news-1-empty-face ((t (:foreground "White")))) + (gnus-group-news-1-face ((t (:bold t :foreground "White" :weight bold)))) + (gnus-group-news-2-empty-face ((t (:foreground "light cyan")))) + (gnus-group-news-2-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (gnus-group-news-3-empty-face ((t (:foreground "LightBlue")))) + (gnus-group-news-3-face ((t (:bold t :foreground "LightBlue" :weight bold)))) + (gnus-group-news-4-empty-face ((t (:foreground "Aquamarine")))) + (gnus-group-news-4-face ((t (:bold t :foreground "Aquamarine" :weight bold)))) + (gnus-group-news-5-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-5-face ((t (:bold t :foreground "MediumAquamarine" :weight bold)))) + (gnus-group-news-6-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-6-face ((t (:bold t :foreground "MediumAquamarine" :weight bold)))) + (gnus-group-news-low-empty-face ((t (:foreground "MediumAquamarine")))) + (gnus-group-news-low-face ((t (:bold t :foreground "MediumAquamarine" :weight bold)))) + (gnus-header-content-face ((t (:foreground "LightSkyBlue3")))) + (gnus-header-from-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (gnus-header-name-face ((t (:bold t :foreground "LightBlue" :weight bold)))) + (gnus-header-newsgroups-face ((t (:italic t :bold t :foreground "MediumAquamarine" :slant italic :weight bold)))) + (gnus-header-subject-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (gnus-server-agent-face ((t (:bold t :foreground "PaleTurquoise" :weight bold)))) + (gnus-server-closed-face ((t (:italic t :foreground "Light Steel Blue" :slant italic)))) + (gnus-server-denied-face ((t (:bold t :foreground "Pink" :weight bold)))) + (gnus-server-offline-face ((t (:bold t :foreground "Yellow" :weight bold)))) + (gnus-server-opened-face ((t (:bold t :foreground "Green1" :weight bold)))) + (gnus-signature-face ((t (:foreground "Grey")))) + (gnus-splash-face ((t (:foreground "ForestGreen")))) + (gnus-summary-cancelled-face ((t (:background "Black" :foreground "Yellow")))) + (gnus-summary-high-ancient-face ((t (:bold t :foreground "MediumAquamarine" :weight bold)))) + (gnus-summary-high-read-face ((t (:bold t :foreground "Aquamarine" :weight bold)))) + (gnus-summary-high-ticked-face ((t (:bold t :foreground "LightSalmon" :weight bold)))) + (gnus-summary-high-unread-face ((t (:italic t :bold t :foreground "beige" :slant italic :weight bold)))) + (gnus-summary-low-ancient-face ((t (:italic t :foreground "DimGray" :slant italic)))) + (gnus-summary-low-read-face ((t (:foreground "slate gray")))) + (gnus-summary-low-ticked-face ((t (:foreground "Pink")))) + (gnus-summary-low-unread-face ((t (:foreground "LightGray")))) + (gnus-summary-normal-ancient-face ((t (:foreground "MediumAquamarine")))) + (gnus-summary-normal-read-face ((t (:foreground "Aquamarine")))) + (gnus-summary-normal-ticked-face ((t (:foreground "LightSalmon")))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:underline t)))) + (header-line ((t (:box (:line-width -1 :style released-button) :background "grey20" :foreground "grey90" :box nil)))) + (highlight ((t (:background "dark slate blue" :foreground "light blue")))) + (highline-face ((t (:background "DeepSkyBlue4")))) + (holiday-face ((t (:background "pink")))) + (info-header-node ((t (:bold t :weight bold)))) + (info-header-xref ((t (:bold t :weight bold :foreground "sky blue")))) + (info-menu-5 ((t (:underline t)))) + (info-menu-header ((t (:bold t :family "helv" :weight bold)))) + (info-node ((t (:bold t :weight bold)))) + (info-xref ((t (:bold t :foreground "sky blue" :weight bold)))) + (isearch ((t (:background "slate blue")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:foreground "sky blue")))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-bug-breakpoint-marker ((t (:background "yellow" :foreground "red")))) + (jde-java-font-lock-api-face ((t (:foreground "light goldenrod")))) + (jde-java-font-lock-bold-face ((t (:bold t :weight bold)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "Aquamarine")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "light coral")))) + (jde-java-font-lock-italic-face ((t (:italic t :slant italic)))) + (jde-java-font-lock-link-face ((t (:foreground "blue" :underline t :slant normal)))) + (jde-java-font-lock-modifier-face ((t (:foreground "LightSteelBlue")))) + (jde-java-font-lock-number-face ((t (:foreground "LightSalmon")))) + (jde-java-font-lock-package-face ((t (:foreground "steelblue1")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (makefile-space-face ((t (:background "hotpink")))) + (menu ((t (:background "MidnightBlue" :foreground "Grey")))) + (message-cited-text-face ((t (:foreground "LightSalmon")))) + (message-header-cc-face ((t (:foreground "light cyan")))) + (message-header-name-face ((t (:foreground "LightBlue")))) + (message-header-newsgroups-face ((t (:italic t :bold t :foreground "MediumAquamarine" :slant italic :weight bold)))) + (message-header-other-face ((t (:foreground "MediumAquamarine")))) + (message-header-subject-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (message-header-to-face ((t (:bold t :foreground "light cyan" :weight bold)))) + (message-header-xheader-face ((t (:foreground "MediumAquamarine")))) + (message-mml-face ((t (:foreground "ForestGreen")))) + (message-separator-face ((t (:foreground "chocolate")))) + (mode-line ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style released-button))))) + (mouse ((t (:background "Grey")))) + (region ((t (:background "DarkSlateBlue")))) + (scroll-bar ((t (:background "grey75")))) + (secondary-selection ((t (:background "steel blue")))) + (semantic-dirty-token-face ((t (:background "gray10")))) + (semantic-unmatched-syntax-face ((t (:underline "red")))) + (show-paren-match-face ((t (:background "light slate blue" :foreground "white")))) + (show-paren-mismatch-face ((t (:background "red" :foreground "white")))) + (speedbar-button-face ((t (:foreground "seashell2")))) + (speedbar-directory-face ((t (:foreground "seashell3")))) + (speedbar-file-face ((t (:foreground "seashell4")))) + (speedbar-highlight-face ((t (:background "dark slate blue" :foreground "wheat")))) + (speedbar-selected-face ((t (:foreground "seashell1" :underline t)))) + (speedbar-separator-face ((t (:background "blue" :foreground "white" :overline "gray")))) + (speedbar-tag-face ((t (:foreground "antique white")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style released-button))))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "light blue")))) + (widget-field-face ((t (:background "RoyalBlue4" :foreground "wheat")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "slate blue" :foreground "wheat")))) + (woman-bold-face ((t (:bold t :foreground "sky blue" :weight bold)))) + (woman-italic-face ((t (:foreground "deep sky blue")))) + (woman-unknown-face ((t (:foreground "LightSalmon")))) + (zmacs-region ((t (:background "DarkSlateBlue"))))))) + +(defun color-theme-vim-colors () + "Color theme by Michael Soulier, created 2003-03-26." + (interactive) + (color-theme-install + '(color-theme-vim-colors + ((background-color . "#ffffff") + (background-mode . light) + (border-color . "black") + (cursor-color . "#000000") + (foreground-color . "#000000") + (mouse-color . "#000000")) + ((Man-overstrike-face . bold) + (Man-underline-face . underline) + (apropos-keybinding-face . underline) + (apropos-label-face . italic) + (apropos-match-face . secondary-selection) + (apropos-property-face . bold-italic) + (apropos-symbol-face . bold) + (cperl-here-face . font-lock-string-face) + (cperl-invalid-face quote underline) + (cperl-pod-face . font-lock-comment-face) + (cperl-pod-head-face . font-lock-variable-name-face) + (help-highlight-face . underline) + (ispell-highlight-face . highlight) + (list-matching-lines-face . bold) + (rpm-spec-dir-face . rpm-spec-dir-face) + (rpm-spec-doc-face . rpm-spec-doc-face) + (rpm-spec-ghost-face . rpm-spec-ghost-face) + (rpm-spec-macro-face . rpm-spec-macro-face) + (rpm-spec-package-face . rpm-spec-package-face) + (rpm-spec-tag-face . rpm-spec-tag-face) + (tags-tag-face . default) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:background "#ffffff" :foreground "#000000")))) + (Info-title-1-face ((t (nil)))) + (Info-title-2-face ((t (nil)))) + (Info-title-3-face ((t (nil)))) + (Info-title-4-face ((t (:bold (bold extra-bold ultra-bold))))) + (bold ((t (:bold (bold extra-bold ultra-bold))))) + (bold-italic ((t (:italic (italic oblique) :bold (bold extra-bold ultra-bold))))) + (border ((t (:background "black")))) + (comint-highlight-input ((t (:bold (bold extra-bold ultra-bold))))) + (comint-highlight-prompt ((t (:foreground "dark blue")))) + (cperl-array-face ((t (:foreground "brown")))) + (cperl-hash-face ((t (:foreground "red")))) + (cperl-nonoverridable-face ((t (:foreground "#008b8b")))) + (cursor ((t (:background "#000000")))) + (fixed-pitch ((t (nil)))) + (font-lock-builtin-face ((t (:foreground "purple")))) + (font-lock-comment-face ((t (:foreground "blue")))) + (font-lock-constant-face ((t (:foreground "green4")))) + (font-lock-doc-face ((t (:background "#f2f2f2")))) + (font-lock-function-name-face ((t (:foreground "#008b8b")))) + (font-lock-keyword-face ((t (:bold (bold extra-bold ultra-bold) :foreground "#a52a2a")))) + (font-lock-string-face ((t (:background "#f2f2f2" :foreground "#ff00ff")))) + (font-lock-type-face ((t (:foreground "ForestGreen")))) + (font-lock-variable-name-face ((t (:foreground "#008b8b")))) + (font-lock-warning-face ((t (:bold (bold extra-bold ultra-bold) :foreground "Red")))) + (fringe ((t (:background "#e5e5e5")))) + (header-line ((t (:background "grey90" :foreground "grey20")))) + (highlight ((t (:background "darkseagreen2")))) + (info-header-node ((t (nil)))) + (info-header-xref ((t (nil)))) + (info-menu-5 ((t (:foreground "red1")))) + (info-menu-header ((t (:bold (bold extra-bold ultra-bold))))) + (info-node ((t (:italic (italic oblique) :bold (bold extra-bold ultra-bold) :foreground "brown")))) + (info-xref ((t (:bold (bold extra-bold ultra-bold) :foreground "magenta4")))) + (isearch ((t (:background "magenta4" :foreground "lightskyblue1")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise")))) + (italic ((t (:italic (italic oblique))))) + (menu ((t (nil)))) + (mode-line ((t (:background "grey75" :foreground "black")))) + (mouse ((t (:background "#000000")))) + (region ((t (:background "lightgoldenrod2")))) + (rpm-spec-dir-face ((t (:foreground "green")))) + (rpm-spec-doc-face ((t (:foreground "magenta")))) + (rpm-spec-ghost-face ((t (:foreground "red")))) + (rpm-spec-macro-face ((t (:foreground "purple")))) + (rpm-spec-package-face ((t (:foreground "red")))) + (rpm-spec-tag-face ((t (:foreground "blue")))) + (scroll-bar ((t (:background "grey75" :foreground "#000000")))) + (secondary-selection ((t (:background "yellow")))) + (sh-heredoc-face ((t (:foreground "tan")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (tool-bar ((t (:background "grey75" :foreground "black")))) + (tooltip ((t (:background "lightyellow" :foreground "black")))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (nil)))) + (widget-button-face ((t (:bold (bold extra-bold ultra-bold))))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85"))))))) + +(defun color-theme-calm-forest () + "Color theme by Artur Hefczyc, created 2003-04-18." + (interactive) + (color-theme-install + '(color-theme-calm-forest + ((background-color . "gray12") + (background-mode . dark) + (border-color . "black") + (cursor-color . "orange") + (foreground-color . "green") + (mouse-color . "yellow")) + ((help-highlight-face . underline) + (list-matching-lines-face . bold) + (senator-eldoc-use-color . t) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "gray12" :foreground "green" :inverse-video nil :box nil +:strike-through nil :overline nil :underline nil :slant normal :weight normal :height 98 :width +normal :family "outline-courier new")))) + (Info-title-1-face ((t (:bold t :weight bold :family "helv" :height 1.728)))) + (Info-title-2-face ((t (:bold t :family "helv" :weight bold :height 1.44)))) + (Info-title-3-face ((t (:bold t :weight bold :family "helv" :height 1.2)))) + (Info-title-4-face ((t (:bold t :family "helv" :weight bold)))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (comint-highlight-input ((t (:bold t :weight bold)))) + (comint-highlight-prompt ((t (:foreground "cyan")))) + (cparen-around-andor-face ((t (:bold t :foreground "maroon" :weight bold)))) + (cparen-around-begin-face ((t (:foreground "maroon")))) + (cparen-around-conditional-face ((t (:bold t :foreground "RoyalBlue" :weight bold)))) + (cparen-around-define-face ((t (:bold t :foreground "Blue" :weight bold)))) + (cparen-around-lambda-face ((t (:foreground "LightSeaGreen")))) + (cparen-around-letdo-face ((t (:bold t :foreground "LightSeaGreen" :weight bold)))) + (cparen-around-quote-face ((t (:foreground "SaddleBrown")))) + (cparen-around-set!-face ((t (:foreground "OrangeRed")))) + (cparen-around-syntax-rules-face ((t (:foreground "Magenta")))) + (cparen-around-vector-face ((t (:foreground "chocolate")))) + (cparen-binding-face ((t (:foreground "ForestGreen")))) + (cparen-binding-list-face ((t (:bold t :foreground "ForestGreen" :weight bold)))) + (cparen-conditional-clause-face ((t (:foreground "RoyalBlue")))) + (cparen-normal-paren-face ((t (:foreground "grey50")))) + (cursor ((t (:background "orange")))) + (custom-button-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style +released-button))))) + (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width +2 :style pressed-button))))) + (custom-changed-face ((t (:background "blue" :foreground "white")))) + (custom-comment-face ((t (:background "dim gray")))) + (custom-comment-tag-face ((t (:foreground "gray80")))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (:bold t :family "helv" :weight bold :height 1.2)))) + (custom-group-tag-face ((t (:bold t :foreground "light blue" :weight bold :height 1.2)))) + (custom-group-tag-face-1 ((t (:bold t :family "helv" :foreground "pink" :weight bold :height +1.2)))) + (custom-invalid-face ((t (:background "red" :foreground "yellow")))) + (custom-modified-face ((t (:background "blue" :foreground "white")))) + (custom-rogue-face ((t (:background "black" :foreground "pink")))) + (custom-saved-face ((t (:underline t)))) + (custom-set-face ((t (:background "white" :foreground "blue")))) + (custom-state-face ((t (:foreground "lime green")))) + (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) + (custom-variable-tag-face ((t (:bold t :family "helv" :foreground "light blue" :weight bold +:height 1.2)))) + (eieio-custom-slot-tag-face ((t (:foreground "light blue")))) + (extra-whitespace-face ((t (:background "pale green")))) + (fixed-pitch ((t (:family "courier")))) + (font-latex-bold-face ((t (:bold t :foreground "OliveDrab" :weight bold)))) + (font-latex-italic-face ((t (:italic t :foreground "OliveDrab" :slant italic)))) + (font-latex-math-face ((t (:foreground "burlywood")))) + (font-latex-sedate-face ((t (:foreground "LightGray")))) + (font-latex-string-face ((t (:foreground "RosyBrown")))) + (font-latex-warning-face ((t (:bold t :foreground "Red" :weight bold)))) + (font-lock-builtin-face ((t (:foreground "LightSteelBlue")))) + (font-lock-comment-face ((t (:foreground "chocolate1")))) + (font-lock-constant-face ((t (:foreground "Aquamarine")))) + (font-lock-doc-face ((t (:foreground "LightSalmon")))) + (font-lock-function-name-face ((t (:foreground "LightSkyBlue")))) + (font-lock-keyword-face ((t (:foreground "Cyan")))) + (font-lock-string-face ((t (:foreground "LightSalmon")))) + (font-lock-type-face ((t (:foreground "PaleGreen")))) + (font-lock-variable-name-face ((t (:foreground "LightGoldenrod")))) + (font-lock-warning-face ((t (:bold t :foreground "Pink" :weight bold)))) + (fringe ((t (:background "grey10")))) + (header-line ((t (:box (:line-width -1 :style released-button) :background "grey20" :foreground +"grey90" :box nil)))) + (highlight ((t (:background "darkolivegreen")))) + (info-header-node ((t (:italic t :bold t :weight bold :slant italic :foreground "white")))) + (info-header-xref ((t (:bold t :weight bold :foreground "cyan")))) + (info-menu-5 ((t (:foreground "red1")))) + (info-menu-header ((t (:bold t :family "helv" :weight bold)))) + (info-node ((t (:italic t :bold t :foreground "white" :slant italic :weight bold)))) + (info-xref ((t (:bold t :foreground "cyan" :weight bold)))) + (isearch ((t (:background "palevioletred2" :foreground "brown4")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise4")))) + (italic ((t (:italic t :slant italic)))) + (jde-bug-breakpoint-cursor ((t (:background "brown" :foreground "cyan")))) + (jde-db-active-breakpoint-face ((t (:background "red" :foreground "black")))) + (jde-db-requested-breakpoint-face ((t (:background "yellow" :foreground "black")))) + (jde-db-spec-breakpoint-face ((t (:background "green" :foreground "black")))) + (jde-java-font-lock-api-face ((t (:foreground "light goldenrod")))) + (jde-java-font-lock-bold-face ((t (:bold t :weight bold)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (:foreground "Aquamarine")))) + (jde-java-font-lock-doc-tag-face ((t (:foreground "light coral")))) + (jde-java-font-lock-italic-face ((t (:italic t :slant italic)))) + (jde-java-font-lock-link-face ((t (:foreground "blue" :underline t :slant normal)))) + (jde-java-font-lock-modifier-face ((t (:foreground "LightSteelBlue")))) + (jde-java-font-lock-number-face ((t (:foreground "LightSalmon")))) + (jde-java-font-lock-operator-face ((t (:foreground "medium blue")))) + (jde-java-font-lock-package-face ((t (:foreground "steelblue1")))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (:underline t)))) + (menu ((t (nil)))) + (mode-line ((t (:background "grey75" :foreground "black" :box (:line-width -1 :style +released-button))))) + (mouse ((t (:background "yellow")))) + (region ((t (:background "blue3")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "SkyBlue4")))) + (semantic-dirty-token-face ((t (:background "gray10")))) + (semantic-unmatched-syntax-face ((t (:underline "red")))) + (senator-intangible-face ((t (:foreground "gray75")))) + (senator-momentary-highlight-face ((t (:background "gray30")))) + (senator-read-only-face ((t (:background "#664444")))) + (show-paren-match-face ((t (:background "turquoise")))) + (show-paren-mismatch-face ((t (:background "purple" :foreground "white")))) + (speedbar-button-face ((t (:foreground "green3")))) + (speedbar-directory-face ((t (:foreground "light blue")))) + (speedbar-file-face ((t (:foreground "cyan")))) + (speedbar-highlight-face ((t (:background "sea green")))) + (speedbar-selected-face ((t (:foreground "red" :underline t)))) + (speedbar-separator-face ((t (:background "blue" :foreground "white" :overline "gray")))) + (speedbar-tag-face ((t (:foreground "yellow")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box (:line-width 1 :style +released-button))))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "lime green")))) + (widget-field-face ((t (:background "dim gray")))) + (widget-inactive-face ((t (:foreground "light gray")))) + (widget-single-line-field-face ((t (:background "dim gray"))))))) + +(defun color-theme-lawrence () + "Color theme by lawrence mitchell . +Mainly shades of green. +Contains faces for erc, gnus, most of jde." + (interactive) + (color-theme-install + '(color-theme-lawrence + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "green") + (foreground-color . "#00CC00") + (mouse-color . "black")) + ((erc-button-face . bold) + (erc-button-mouse-face . highlight) + (gnus-article-button-face . bold) + (gnus-article-mouse-face . highlight) + (gnus-cite-attribution-face . gnus-cite-attribution-face) + (gnus-mouse-face . highlight) + (gnus-server-agent-face . gnus-server-agent-face) + (gnus-server-closed-face . gnus-server-closed-face) + (gnus-server-denied-face . gnus-server-denied-face) + (gnus-server-offline-face . gnus-server-offline-face) + (gnus-server-opened-face . gnus-server-opened-face) + (gnus-signature-face . gnus-signature-face) + (gnus-summary-selected-face . gnus-summary-selected-face) + (gnus-treat-display-face . head) + (gnus-treat-display-xface . head) + (list-matching-lines-buffer-name-face . underline) + (list-matching-lines-face . bold) + (paren-match-face . paren-face-match) + (paren-mismatch-face . paren-face-mismatch) + (paren-no-match-face . paren-face-no-match) + (sgml-set-face . t) + (tags-tag-face . default) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (nil)))) + (Buffer-menu-buffer-face ((t (:bold t :weight bold)))) + (bg:erc-color-face0 ((t (:background "White")))) + (bg:erc-color-face1 ((t (:background "black")))) + (bg:erc-color-face10 ((t (:background "lightblue1")))) + (bg:erc-color-face11 ((t (:background "cyan")))) + (bg:erc-color-face12 ((t (:background "blue")))) + (bg:erc-color-face13 ((t (:background "deeppink")))) + (bg:erc-color-face14 ((t (:background "gray50")))) + (bg:erc-color-face15 ((t (:background "gray90")))) + (bg:erc-color-face2 ((t (:background "blue4")))) + (bg:erc-color-face3 ((t (:background "green4")))) + (bg:erc-color-face4 ((t (:background "red")))) + (bg:erc-color-face5 ((t (:background "brown")))) + (bg:erc-color-face6 ((t (:background "purple")))) + (bg:erc-color-face7 ((t (:background "orange")))) + (bg:erc-color-face8 ((t (:background "yellow")))) + (bg:erc-color-face9 ((t (:background "green")))) + (bold ((t (:bold t :foreground "#00CC00" :background "black")))) + (bold-italic ((t (:italic t :bold t :slant oblique :weight semi-bold)))) + (border ((t (:background "black")))) + (button ((t (:underline t)))) + (comint-highlight-input ((t (nil)))) + (comint-highlight-prompt ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (cursor ((t (:background "green")))) + (custom-button-face ((t (:bold t :foreground "#00CC00" :background "black")))) + (custom-button-pressed-face ((t (nil)))) + (custom-changed-face ((t (:italic t :foreground "#00CC00" :background "black" :slant oblique)))) + (custom-comment-face ((t (nil)))) + (custom-comment-tag-face ((t (nil)))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (nil)))) + (custom-group-tag-face ((t (nil)))) + (custom-group-tag-face-1 ((t (nil)))) + (custom-invalid-face ((t (:foreground "#00CC00" :background "black" :strike-through t)))) + (custom-modified-face ((t (nil)))) + (custom-rogue-face ((t (nil)))) + (custom-saved-face ((t (nil)))) + (custom-set-face ((t (nil)))) + (custom-state-face ((t (nil)))) + (custom-variable-button-face ((t (nil)))) + (custom-variable-tag-face ((t (nil)))) + (erc-action-face ((t (:bold t :weight semi-bold)))) + (erc-bold-face ((t (:bold t :weight bold)))) + (erc-current-nick-face ((t (:bold t :foreground "LightSeaGreen" :weight semi-bold)))) + (erc-dangerous-host-face ((t (:foreground "red")))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (:foreground "IndianRed")))) + (erc-error-face ((t (:bold t :weight semi-bold :background "darkblue" :foreground "#00CC00")))) + (erc-fool-face ((t (:foreground "dim gray")))) + (erc-input-face ((t (:foreground "springgreen")))) + (erc-inverse-face ((t (:bold t :background "Darkgreen" :foreground "Black" :weight semi-bold)))) + (erc-keyword-face ((t (:bold t :foreground "pale green" :weight bold)))) + (erc-nick-default-face ((t (:bold t :weight semi-bold)))) + (erc-nick-msg-face ((t (:bold t :foreground "springgreen" :weight semi-bold)))) + (erc-notice-face ((t (:foreground "seagreen" :weight normal)))) + (erc-pal-face ((t (:bold t :foreground "Magenta" :weight bold)))) + (erc-prompt-face ((t (:bold t :background "lightBlue2" :foreground "Black" :weight semi-bold)))) + (erc-timestamp-face ((t (:foreground "seagreen" :weight normal)))) + (erc-underline-face ((t (:underline t)))) + (fg:erc-color-face0 ((t (:foreground "White")))) + (fg:erc-color-face1 ((t (:foreground "black")))) + (fg:erc-color-face10 ((t (:foreground "lightblue1")))) + (fg:erc-color-face11 ((t (:foreground "cyan")))) + (fg:erc-color-face12 ((t (:foreground "blue")))) + (fg:erc-color-face13 ((t (:foreground "deeppink")))) + (fg:erc-color-face14 ((t (:foreground "gray50")))) + (fg:erc-color-face15 ((t (:foreground "gray90")))) + (fg:erc-color-face2 ((t (:foreground "blue4")))) + (fg:erc-color-face3 ((t (:foreground "green4")))) + (fg:erc-color-face4 ((t (:foreground "red")))) + (fg:erc-color-face5 ((t (:foreground "brown")))) + (fg:erc-color-face6 ((t (:foreground "purple")))) + (fg:erc-color-face7 ((t (:foreground "orange")))) + (fg:erc-color-face8 ((t (:foreground "yellow")))) + (fg:erc-color-face9 ((t (:foreground "green")))) + (fixed-pitch ((t (nil)))) + (font-latex-string-face ((t (:bold t :weight semi-bold :foreground "seagreen" :background "black")))) + (font-latex-warning-face ((t (:bold t :weight semi-bold :background "darkblue" :foreground "#00CC00")))) + (font-lock-builtin-face ((t (:foreground "seagreen1")))) + (font-lock-comment-face ((t (:background "black" :foreground "medium spring green")))) + (font-lock-constant-face ((t (nil)))) + (font-lock-doc-face ((t (:bold t :background "black" :foreground "seagreen" :weight semi-bold)))) + (font-lock-function-name-face ((t (:bold t :foreground "#00CC00" :background "black")))) + (font-lock-keyword-face ((t (:bold t :background "black" :foreground "green" :underline t :weight semi-bold)))) + (font-lock-preprocessor-face ((t (:foreground "#00ccdd")))) + (font-lock-string-face ((t (:bold t :background "black" :foreground "seagreen" :weight semi-bold)))) + (font-lock-type-face ((t (nil)))) + (font-lock-variable-name-face ((t (nil)))) + (font-lock-warning-face ((t (:bold t :foreground "#00CC00" :background "darkblue" :weight semi-bold)))) + (fringe ((t (:foreground "#00CC00" :background "#151515")))) + (gnus-cite-attribution-face ((t (:italic t :foreground "#00CC00" :background "black" :slant italic)))) + (gnus-cite-face-1 ((t (:background "black" :foreground "springgreen")))) + (gnus-cite-face-10 ((t (nil)))) + (gnus-cite-face-11 ((t (nil)))) + (gnus-cite-face-2 ((t (:background "black" :foreground "lightseagreen")))) + (gnus-cite-face-3 ((t (:background "black" :foreground "darkseagreen")))) + (gnus-cite-face-4 ((t (:background "black" :foreground "forestgreen")))) + (gnus-cite-face-5 ((t (:background "black" :foreground "springgreen")))) + (gnus-cite-face-6 ((t (:background "black" :foreground "springgreen")))) + (gnus-cite-face-7 ((t (:background "black" :foreground "springgreen")))) + (gnus-cite-face-8 ((t (:background "black" :foreground "springgreen")))) + (gnus-cite-face-9 ((t (:background "black" :foreground "springgreen")))) + (gnus-emphasis-bold ((t (:bold t :weight semi-bold)))) + (gnus-emphasis-bold-italic ((t (:italic t :bold t :slant italic :weight semi-bold)))) + (gnus-emphasis-highlight-words ((t (:bold t :foreground "#00CC00" :background "black" :underline t :weight bold)))) + (gnus-emphasis-italic ((t (:italic t :slant italic)))) + (gnus-emphasis-strikethru ((t (nil)))) + (gnus-emphasis-underline ((t (:underline t)))) + (gnus-emphasis-underline-bold ((t (:bold t :underline t :weight semi-bold)))) + (gnus-emphasis-underline-bold-italic ((t (:italic t :bold t :underline t :slant italic :weight semi-bold)))) + (gnus-emphasis-underline-italic ((t (:italic t :underline t :slant italic)))) + (gnus-group-mail-1-empty-face ((t (nil)))) + (gnus-group-mail-1-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-mail-2-empty-face ((t (nil)))) + (gnus-group-mail-2-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-mail-3-empty-face ((t (nil)))) + (gnus-group-mail-3-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-mail-low-empty-face ((t (nil)))) + (gnus-group-mail-low-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-news-1-empty-face ((t (nil)))) + (gnus-group-news-1-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-news-2-empty-face ((t (nil)))) + (gnus-group-news-2-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-group-news-low-empty-face ((t (nil)))) + (gnus-group-news-low-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-header-content-face ((t (:background "black" :foreground "springgreen")))) + (gnus-header-from-face ((t (nil)))) + (gnus-header-name-face ((t (nil)))) + (gnus-header-newsgroups-face ((t (nil)))) + (gnus-header-subject-face ((t (nil)))) + (gnus-server-agent-face ((t (:bold t :foreground "PaleTurquoise" :weight bold)))) + (gnus-server-closed-face ((t (:italic t :foreground "Light Steel Blue" :slant italic)))) + (gnus-server-denied-face ((t (:bold t :foreground "Pink" :weight semi-bold)))) + (gnus-server-offline-face ((t (:bold t :foreground "Yellow" :weight bold)))) + (gnus-server-opened-face ((t (:bold t :foreground "Green1" :weight semi-bold)))) + (gnus-signature-face ((t (:background "black" :foreground "springgreen" :slant normal)))) + (gnus-splash-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-summary-cancelled-face ((t (:foreground "#00CC00" :background "black" :strike-through t)))) + (gnus-summary-high-ancient-face ((t (nil)))) + (gnus-summary-high-read-face ((t (nil)))) + (gnus-summary-high-ticked-face ((t (:background "black" :foreground "seagreen")))) + (gnus-summary-high-undownloaded-face ((t (:bold t :foreground "LightGray" :weight bold)))) + (gnus-summary-high-unread-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-summary-low-ancient-face ((t (nil)))) + (gnus-summary-low-read-face ((t (nil)))) + (gnus-summary-low-ticked-face ((t (nil)))) + (gnus-summary-low-undownloaded-face ((t (:italic t :foreground "LightGray" :slant italic :weight normal)))) + (gnus-summary-low-unread-face ((t (:bold t :foreground "#00CC00" :background "black" :weight bold)))) + (gnus-summary-normal-ancient-face ((t (nil)))) + (gnus-summary-normal-read-face ((t (nil)))) + (gnus-summary-normal-ticked-face ((t (:bold t :foreground "#00CC00" :background "black")))) + (gnus-summary-normal-undownloaded-face ((t (:foreground "LightGray" :weight normal)))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (:background "#101010")))) + (gnus-x-face ((t (:background "white" :foreground "black")))) + (header-line ((t (nil)))) + (highlight ((t (:foreground "#00CC00" :background "darkgreen")))) + (ido-first-match-face ((t (:bold t :weight bold)))) + (ido-indicator-face ((t (:background "red" :foreground "yellow" :width condensed)))) + (ido-only-match-face ((t (:foreground "ForestGreen")))) + (ido-subdir-face ((t (:foreground "red")))) + (isearch ((t (:background "seagreen" :foreground "black")))) + (isearch-lazy-highlight-face ((t (:background "darkseagreen" :foreground "black")))) + (italic ((t (:italic t :foreground "#00CC00" :background "black" :slant oblique)))) + (menu ((t (:bold t :background "black" :foreground "green" :box (:line-width -1 :color "#606060") :weight semi-bold)))) + (message-cited-text-face ((t (:italic t :foreground "#00CC00" :background "black" :slant oblique)))) + (message-header-cc-face ((t (nil)))) + (message-header-name-face ((t (nil)))) + (message-header-newsgroups-face ((t (:bold t :foreground "#00CC00" :background "black")))) + (message-header-other-face ((t (:bold t :foreground "#00CC00" :background "black")))) + (message-header-subject-face ((t (:bold t :foreground "#00CC00" :background "black")))) + (message-header-to-face ((t (:bold t :foreground "#00CC00" :background "black")))) + (message-header-xheader-face ((t (nil)))) + (message-mml-face ((t (:italic t :foreground "#00CC00" :background "black" :slant oblique)))) + (message-separator-face ((t (nil)))) + (minibuffer-prompt ((t (:background "black" :foreground "seagreen")))) + (mode-line ((t (:bold t :background "#404040" :foreground "green" :box (:line-width -1 :color "#606060") :weight semi-bold)))) + (mode-line-inactive ((t (:bold t :weight semi-bold :box (:line-width -1 :color "#606060") :foreground "green" :background "#101010")))) + (mouse ((t (:background "black")))) + (paren-face ((t (:background "black" :foreground "darkgreen")))) + (paren-face-match ((t (:background "black" :foreground "springgreen")))) + (paren-face-mismatch ((t (:foreground "#00CC00" :background "black" :strike-through t)))) + (paren-face-no-match ((t (:background "black" :foreground "red")))) + (region ((t (:background "seagreen" :foreground "black")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "darkseagreen" :foreground "black")))) + (semantic-dirty-token-face ((t (:background "gray10")))) + (semantic-unmatched-syntax-face ((t (:underline "red")))) + (sgml-end-tag-face ((t (:foreground "seagreen")))) + (sgml-start-tag-face ((t (:foreground "seagreen")))) + (tabbar-button-face ((t (:background "black" :foreground "#00cc00" :box (:line-width 2 :color "black" :style released-button))))) + (tabbar-default-face ((t (:background "black" :foreground "#00cc00")))) + (tabbar-selected-face ((t (:background "black" :foreground "springgreen" :box (:line-width 2 :color "black" :style released-button))))) + (tabbar-separator-face ((t (:foreground "#00cc00" :background "black")))) + (tabbar-unselected-face ((t (:background "black" :foreground "seagreen" :box (:line-width 2 :color "black" :style pressed-button))))) + (tool-bar ((t (:box (:line-width 1 :style released-button))))) + (tooltip ((t (nil)))) + (trailing-whitespace ((t (:background "lightseagreen" :foreground "black")))) + (underline ((t (:foreground "#00CC00" :background "black" :underline t)))) + (variable-pitch ((t (:underline nil :foreground "#00CC00" :background "black")))) + (widget-button-face ((t (:bold t :foreground "#00CC00" :background "black")))) + (widget-button-pressed-face ((t (nil)))) + (widget-documentation-face ((t (nil)))) + (widget-field-face ((t (:italic t :foreground "#00CC00" :background "black" :slant oblique)))) + (widget-inactive-face ((t (nil)))) + (widget-single-line-field-face ((t (nil))))))) + +(defun color-theme-matrix () + "Color theme by walterh@rocketmail.com, created 2003-10-16." + (interactive) + (color-theme-install + '(color-theme-matrix + ((background-color . "black") + (background-mode . dark) + (background-toolbar-color . "bisque") + (border-color . "orange") + (bottom-toolbar-shadow-color . "#909099999999") + (cursor-color . "#7eff00") + (foreground-color . "#7eff00") + (mouse-color . "#7eff00") + (top-toolbar-shadow-color . "#ffffffffffff")) + ((help-highlight-face . underline) + (list-matching-lines-face . bold) + (rmail-highlight-face . font-lock-function-name-face) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "black" :foreground +"#7eff00" :inverse-video nil :box nil :strike-through nil :overline nil +:underline nil :slant normal :weight normal :height 90 :width normal +:family "outline-courier new")))) + (Buffer-menu-buffer-face ((t (nil)))) + (CUA-global-mark-face ((t (nil)))) + (CUA-rectangle-face ((t (nil)))) + (CUA-rectangle-noselect-face ((t (nil)))) + (Info-title-1-face ((t (nil)))) + (Info-title-2-face ((t (nil)))) + (Info-title-3-face ((t (nil)))) + (Info-title-4-face ((t (nil)))) + (antlr-font-lock-keyword-face ((t (nil)))) + (antlr-font-lock-literal-face ((t (nil)))) + (antlr-font-lock-ruledef-face ((t (nil)))) + (antlr-font-lock-ruleref-face ((t (nil)))) + (antlr-font-lock-tokendef-face ((t (nil)))) + (antlr-font-lock-tokenref-face ((t (nil)))) + (bbdb-company ((t (nil)))) + (bbdb-field-name ((t (nil)))) + (bbdb-field-value ((t (nil)))) + (bbdb-name ((t (nil)))) + (bg:erc-color-face0 ((t (nil)))) + (bg:erc-color-face1 ((t (nil)))) + (bg:erc-color-face10 ((t (nil)))) + (bg:erc-color-face11 ((t (nil)))) + (bg:erc-color-face12 ((t (nil)))) + (bg:erc-color-face13 ((t (nil)))) + (bg:erc-color-face14 ((t (nil)))) + (bg:erc-color-face15 ((t (nil)))) + (bg:erc-color-face2 ((t (nil)))) + (bg:erc-color-face3 ((t (nil)))) + (bg:erc-color-face4 ((t (nil)))) + (bg:erc-color-face5 ((t (nil)))) + (bg:erc-color-face6 ((t (nil)))) + (bg:erc-color-face7 ((t (nil)))) + (bg:erc-color-face8 ((t (nil)))) + (bg:erc-color-face9 ((t (nil)))) + (blank-space-face ((t (nil)))) + (blank-tab-face ((t (nil)))) + (blue ((t (nil)))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:bold t :weight bold)))) + (border ((t (:background "orange")))) + (border-glyph ((t (nil)))) + (buffers-tab ((t (nil)))) + (button ((t (nil)))) + (calendar-today-face ((t (nil)))) + (change-log-acknowledgement-face ((t (nil)))) + (change-log-conditionals-face ((t (nil)))) + (change-log-date-face ((t (nil)))) + (change-log-email-face ((t (nil)))) + (change-log-file-face ((t (nil)))) + (change-log-function-face ((t (nil)))) + (change-log-list-face ((t (nil)))) + (change-log-name-face ((t (nil)))) + (clearcase-dired-checkedout-face ((t (nil)))) + (comint-highlight-input ((t (nil)))) + (comint-highlight-prompt ((t (nil)))) + (cparen-around-andor-face ((t (nil)))) + (cparen-around-begin-face ((t (nil)))) + (cparen-around-conditional-face ((t (nil)))) + (cparen-around-define-face ((t (nil)))) + (cparen-around-lambda-face ((t (nil)))) + (cparen-around-letdo-face ((t (nil)))) + (cparen-around-quote-face ((t (nil)))) + (cparen-around-set!-face ((t (nil)))) + (cparen-around-syntax-rules-face ((t (nil)))) + (cparen-around-vector-face ((t (nil)))) + (cparen-binding-face ((t (nil)))) + (cparen-binding-list-face ((t (nil)))) + (cparen-conditional-clause-face ((t (nil)))) + (cparen-normal-paren-face ((t (nil)))) + (cperl-array-face ((t (nil)))) + (cperl-hash-face ((t (nil)))) + (cperl-invalid-face ((t (nil)))) + (cperl-nonoverridable-face ((t (nil)))) + (cursor ((t (:background "#7eff00" :foreground "black")))) + (custom-button-face ((t (nil)))) + (custom-button-pressed-face ((t (nil)))) + (custom-changed-face ((t (nil)))) + (custom-comment-face ((t (nil)))) + (custom-comment-tag-face ((t (nil)))) + (custom-documentation-face ((t (nil)))) + (custom-face-tag-face ((t (nil)))) + (custom-group-tag-face ((t (nil)))) + (custom-group-tag-face-1 ((t (nil)))) + (custom-invalid-face ((t (nil)))) + (custom-modified-face ((t (nil)))) + (custom-rogue-face ((t (nil)))) + (custom-saved-face ((t (nil)))) + (custom-set-face ((t (nil)))) + (custom-state-face ((t (nil)))) + (custom-variable-button-face ((t (nil)))) + (custom-variable-tag-face ((t (nil)))) + (cvs-filename-face ((t (nil)))) + (cvs-handled-face ((t (nil)))) + (cvs-header-face ((t (nil)))) + (cvs-marked-face ((t (nil)))) + (cvs-msg-face ((t (nil)))) + (cvs-need-action-face ((t (nil)))) + (cvs-unknown-face ((t (nil)))) + (cyan ((t (nil)))) + (diary-face ((t (nil)))) + (diff-added-face ((t (nil)))) + (diff-changed-face ((t (nil)))) + (diff-context-face ((t (nil)))) + (diff-file-header-face ((t (nil)))) + (diff-function-face ((t (nil)))) + (diff-header-face ((t (nil)))) + (diff-hunk-header-face ((t (nil)))) + (diff-index-face ((t (nil)))) + (diff-nonexistent-face ((t (nil)))) + (diff-removed-face ((t (nil)))) + (dired-face-boring ((t (nil)))) + (dired-face-directory ((t (nil)))) + (dired-face-executable ((t (nil)))) + (dired-face-flagged ((t (nil)))) + (dired-face-header ((t (nil)))) + (dired-face-marked ((t (nil)))) + (dired-face-permissions ((t (nil)))) + (dired-face-setuid ((t (nil)))) + (dired-face-socket ((t (nil)))) + (dired-face-symlink ((t (nil)))) + (display-time-mail-balloon-enhance-face ((t (nil)))) + (display-time-mail-balloon-gnus-group-face ((t (nil)))) + (display-time-time-balloon-face ((t (nil)))) + (ebrowse-default-face ((t (nil)))) + (ebrowse-file-name-face ((t (nil)))) + (ebrowse-member-attribute-face ((t (nil)))) + (ebrowse-member-class-face ((t (nil)))) + (ebrowse-progress-face ((t (nil)))) + (ebrowse-root-class-face ((t (nil)))) + (ebrowse-tree-mark-face ((t (nil)))) + (ecb-sources-face ((t (nil)))) + (edb-inter-field-face ((t (nil)))) + (edb-normal-summary-face ((t (nil)))) + (ediff-current-diff-face-A ((t (nil)))) + (ediff-current-diff-face-Ancestor ((t (nil)))) + (ediff-current-diff-face-B ((t (nil)))) + (ediff-current-diff-face-C ((t (nil)))) + (ediff-even-diff-face-A ((t (nil)))) + (ediff-even-diff-face-Ancestor ((t (nil)))) + (ediff-even-diff-face-B ((t (nil)))) + (ediff-even-diff-face-C ((t (nil)))) + (ediff-fine-diff-face-A ((t (nil)))) + (ediff-fine-diff-face-Ancestor ((t (nil)))) + (ediff-fine-diff-face-B ((t (nil)))) + (ediff-fine-diff-face-C ((t (nil)))) + (ediff-odd-diff-face-A ((t (nil)))) + (ediff-odd-diff-face-Ancestor ((t (nil)))) + (ediff-odd-diff-face-B ((t (nil)))) + (ediff-odd-diff-face-C ((t (nil)))) + (eieio-custom-slot-tag-face ((t (nil)))) + (emacs-wiki-bad-link-face ((t (nil)))) + (emacs-wiki-link-face ((t (nil)))) + (erc-action-face ((t (nil)))) + (erc-bold-face ((t (nil)))) + (erc-current-nick-face ((t (nil)))) + (erc-dangerous-host-face ((t (nil)))) + (erc-default-face ((t (nil)))) + (erc-direct-msg-face ((t (nil)))) + (erc-error-face ((t (nil)))) + (erc-fool-face ((t (nil)))) + (erc-highlight-face ((t (nil)))) + (erc-input-face ((t (nil)))) + (erc-inverse-face ((t (nil)))) + (erc-keyword-face ((t (nil)))) + (erc-nick-default-face ((t (nil)))) + (erc-nick-msg-face ((t (nil)))) + (erc-notice-face ((t (nil)))) + (erc-pal-face ((t (nil)))) + (erc-prompt-face ((t (nil)))) + (erc-timestamp-face ((t (nil)))) + (erc-underline-face ((t (nil)))) + (eshell-ls-archive-face ((t (nil)))) + (eshell-ls-backup-face ((t (nil)))) + (eshell-ls-clutter-face ((t (nil)))) + (eshell-ls-directory-face ((t (nil)))) + (eshell-ls-executable-face ((t (nil)))) + (eshell-ls-missing-face ((t (nil)))) + (eshell-ls-picture-face ((t (nil)))) + (eshell-ls-product-face ((t (nil)))) + (eshell-ls-readonly-face ((t (nil)))) + (eshell-ls-special-face ((t (nil)))) + (eshell-ls-symlink-face ((t (nil)))) + (eshell-ls-text-face ((t (nil)))) + (eshell-ls-todo-face ((t (nil)))) + (eshell-ls-unreadable-face ((t (nil)))) + (eshell-prompt-face ((t (nil)))) + (eshell-test-failed-face ((t (nil)))) + (eshell-test-ok-face ((t (nil)))) + (excerpt ((t (nil)))) + (extra-whitespace-face ((t (nil)))) + (ff-paths-non-existant-file-face ((t (nil)))) + (fg:black ((t (nil)))) + (fg:erc-color-face0 ((t (nil)))) + (fg:erc-color-face1 ((t (nil)))) + (fg:erc-color-face10 ((t (nil)))) + (fg:erc-color-face11 ((t (nil)))) + (fg:erc-color-face12 ((t (nil)))) + (fg:erc-color-face13 ((t (nil)))) + (fg:erc-color-face14 ((t (nil)))) + (fg:erc-color-face15 ((t (nil)))) + (fg:erc-color-face2 ((t (nil)))) + (fg:erc-color-face3 ((t (nil)))) + (fg:erc-color-face4 ((t (nil)))) + (fg:erc-color-face5 ((t (nil)))) + (fg:erc-color-face6 ((t (nil)))) + (fg:erc-color-face7 ((t (nil)))) + (fg:erc-color-face8 ((t (nil)))) + (fg:erc-color-face9 ((t (nil)))) + (fixed ((t (nil)))) + (fixed-pitch ((t (nil)))) + (fl-comment-face ((t (nil)))) + (fl-function-name-face ((t (nil)))) + (fl-keyword-face ((t (nil)))) + (fl-string-face ((t (nil)))) + (fl-type-face ((t (nil)))) + (flash-paren-face-off ((t (nil)))) + (flash-paren-face-on ((t (nil)))) + (flash-paren-face-region ((t (nil)))) + (flyspell-duplicate-face ((t (nil)))) + (flyspell-incorrect-face ((t (nil)))) + (font-latex-bold-face ((t (nil)))) + (font-latex-italic-face ((t (nil)))) + (font-latex-math-face ((t (nil)))) + (font-latex-sedate-face ((t (nil)))) + (font-latex-string-face ((t (nil)))) + (font-latex-warning-face ((t (nil)))) + (font-lock-builtin-face ((t (:foreground "pink2")))) + (font-lock-comment-face ((t (:italic t :background "black" :slant +italic)))) + (font-lock-constant-face ((t (:foreground "magenta")))) + (font-lock-doc-face ((t (nil)))) + (font-lock-doc-string-face ((t (nil)))) + (font-lock-exit-face ((t (nil)))) + (font-lock-function-name-face ((t (:bold t :underline t :weight +bold)))) + (font-lock-keyword-face ((t (:foreground "yellow1")))) + (font-lock-other-emphasized-face ((t (nil)))) + (font-lock-other-type-face ((t (nil)))) + (font-lock-preprocessor-face ((t (nil)))) + (font-lock-reference-face ((t (nil)))) + (font-lock-special-comment-face ((t (nil)))) + (font-lock-special-keyword-face ((t (nil)))) + (font-lock-string-face ((t (:foreground "yellow2")))) + (font-lock-type-face ((t (:foreground "LightYellow1")))) + (font-lock-variable-name-face ((t (:foreground "light green")))) + (font-lock-warning-face ((t (nil)))) + (fringe ((t (nil)))) + (gnus-cite-attribution-face ((t (nil)))) + (gnus-cite-face-1 ((t (nil)))) + (gnus-cite-face-10 ((t (nil)))) + (gnus-cite-face-11 ((t (nil)))) + (gnus-cite-face-2 ((t (nil)))) + (gnus-cite-face-3 ((t (nil)))) + (gnus-cite-face-4 ((t (nil)))) + (gnus-cite-face-5 ((t (nil)))) + (gnus-cite-face-6 ((t (nil)))) + (gnus-cite-face-7 ((t (nil)))) + (gnus-cite-face-8 ((t (nil)))) + (gnus-cite-face-9 ((t (nil)))) + (gnus-emphasis-bold ((t (nil)))) + (gnus-emphasis-bold-italic ((t (nil)))) + (gnus-emphasis-highlight-words ((t (nil)))) + (gnus-emphasis-italic ((t (nil)))) + (gnus-emphasis-strikethru ((t (nil)))) + (gnus-emphasis-underline ((t (nil)))) + (gnus-emphasis-underline-bold ((t (nil)))) + (gnus-emphasis-underline-bold-italic ((t (nil)))) + (gnus-emphasis-underline-italic ((t (nil)))) + (gnus-filterhist-face-1 ((t (nil)))) + (gnus-group-mail-1-empty-face ((t (nil)))) + (gnus-group-mail-1-face ((t (nil)))) + (gnus-group-mail-2-empty-face ((t (nil)))) + (gnus-group-mail-2-face ((t (nil)))) + (gnus-group-mail-3-empty-face ((t (nil)))) + (gnus-group-mail-3-face ((t (nil)))) + (gnus-group-mail-low-empty-face ((t (nil)))) + (gnus-group-mail-low-face ((t (nil)))) + (gnus-group-news-1-empty-face ((t (nil)))) + (gnus-group-news-1-face ((t (nil)))) + (gnus-group-news-2-empty-face ((t (nil)))) + (gnus-group-news-2-face ((t (nil)))) + (gnus-group-news-3-empty-face ((t (nil)))) + (gnus-group-news-3-face ((t (nil)))) + (gnus-group-news-4-empty-face ((t (nil)))) + (gnus-group-news-4-face ((t (nil)))) + (gnus-group-news-5-empty-face ((t (nil)))) + (gnus-group-news-5-face ((t (nil)))) + (gnus-group-news-6-empty-face ((t (nil)))) + (gnus-group-news-6-face ((t (nil)))) + (gnus-group-news-low-empty-face ((t (nil)))) + (gnus-group-news-low-face ((t (nil)))) + (gnus-header-content-face ((t (nil)))) + (gnus-header-from-face ((t (nil)))) + (gnus-header-name-face ((t (nil)))) + (gnus-header-newsgroups-face ((t (nil)))) + (gnus-header-subject-face ((t (nil)))) + (gnus-picon-face ((t (nil)))) + (gnus-picon-xbm-face ((t (nil)))) + (gnus-picons-face ((t (nil)))) + (gnus-picons-xbm-face ((t (nil)))) + (gnus-server-agent-face ((t (nil)))) + (gnus-server-closed-face ((t (nil)))) + (gnus-server-denied-face ((t (nil)))) + (gnus-server-offline-face ((t (nil)))) + (gnus-server-opened-face ((t (nil)))) + (gnus-signature-face ((t (nil)))) + (gnus-splash ((t (nil)))) + (gnus-splash-face ((t (nil)))) + (gnus-summary-cancelled-face ((t (nil)))) + (gnus-summary-high-ancient-face ((t (nil)))) + (gnus-summary-high-read-face ((t (nil)))) + (gnus-summary-high-ticked-face ((t (nil)))) + (gnus-summary-high-undownloaded-face ((t (nil)))) + (gnus-summary-high-unread-face ((t (nil)))) + (gnus-summary-low-ancient-face ((t (nil)))) + (gnus-summary-low-read-face ((t (nil)))) + (gnus-summary-low-ticked-face ((t (nil)))) + (gnus-summary-low-undownloaded-face ((t (nil)))) + (gnus-summary-low-unread-face ((t (nil)))) + (gnus-summary-normal-ancient-face ((t (nil)))) + (gnus-summary-normal-read-face ((t (nil)))) + (gnus-summary-normal-ticked-face ((t (nil)))) + (gnus-summary-normal-undownloaded-face ((t (nil)))) + (gnus-summary-normal-unread-face ((t (nil)))) + (gnus-summary-selected-face ((t (nil)))) + (gnus-x-face ((t (nil)))) + (green ((t (nil)))) + (gui-button-face ((t (nil)))) + (gui-element ((t (nil)))) + (header-line ((t (nil)))) + (hi-black-b ((t (nil)))) + (hi-black-hb ((t (nil)))) + (hi-blue ((t (nil)))) + (hi-blue-b ((t (nil)))) + (hi-green ((t (nil)))) + (hi-green-b ((t (nil)))) + (hi-pink ((t (nil)))) + (hi-red-b ((t (nil)))) + (hi-yellow ((t (nil)))) + (highlight ((t (:background "#7eff00" :foreground "black")))) + (highlight-changes-delete-face ((t (nil)))) + (highlight-changes-face ((t (nil)))) + (highline-face ((t (nil)))) + (holiday-face ((t (nil)))) + (html-helper-bold-face ((t (nil)))) + (html-helper-bold-italic-face ((t (nil)))) + (html-helper-builtin-face ((t (nil)))) + (html-helper-italic-face ((t (nil)))) + (html-helper-underline-face ((t (nil)))) + (html-tag-face ((t (nil)))) + (hyper-apropos-documentation ((t (nil)))) + (hyper-apropos-heading ((t (nil)))) + (hyper-apropos-hyperlink ((t (nil)))) + (hyper-apropos-major-heading ((t (nil)))) + (hyper-apropos-section-heading ((t (nil)))) + (hyper-apropos-warning ((t (nil)))) + (ibuffer-deletion-face ((t (nil)))) + (ibuffer-marked-face ((t (nil)))) + (idlwave-help-link-face ((t (nil)))) + (idlwave-shell-bp-face ((t (nil)))) + (ido-first-match-face ((t (nil)))) + (ido-indicator-face ((t (nil)))) + (ido-only-match-face ((t (nil)))) + (ido-subdir-face ((t (nil)))) + (info-header-node ((t (nil)))) + (info-header-xref ((t (nil)))) + (info-menu-5 ((t (nil)))) + (info-menu-6 ((t (nil)))) + (info-menu-header ((t (nil)))) + (info-node ((t (nil)))) + (info-xref ((t (nil)))) + (isearch ((t (nil)))) + (isearch-lazy-highlight-face ((t (nil)))) + (isearch-secondary ((t (nil)))) + (italic ((t (:underline t)))) + (jde-bug-breakpoint-cursor ((t (nil)))) + (jde-bug-breakpoint-marker ((t (nil)))) + (jde-db-active-breakpoint-face ((t (nil)))) + (jde-db-requested-breakpoint-face ((t (nil)))) + (jde-db-spec-breakpoint-face ((t (nil)))) + (jde-java-font-lock-api-face ((t (nil)))) + (jde-java-font-lock-bold-face ((t (nil)))) + (jde-java-font-lock-code-face ((t (nil)))) + (jde-java-font-lock-constant-face ((t (nil)))) + (jde-java-font-lock-doc-tag-face ((t (nil)))) + (jde-java-font-lock-italic-face ((t (nil)))) + (jde-java-font-lock-link-face ((t (nil)))) + (jde-java-font-lock-modifier-face ((t (nil)))) + (jde-java-font-lock-number-face ((t (nil)))) + (jde-java-font-lock-operator-face ((t (nil)))) + (jde-java-font-lock-package-face ((t (nil)))) + (jde-java-font-lock-pre-face ((t (nil)))) + (jde-java-font-lock-underline-face ((t (nil)))) + (lazy-highlight-face ((t (nil)))) + (left-margin ((t (nil)))) + (linemenu-face ((t (nil)))) + (list-mode-item-selected ((t (nil)))) + (log-view-file-face ((t (nil)))) + (log-view-message-face ((t (nil)))) + (magenta ((t (nil)))) + (makefile-space-face ((t (nil)))) + (man-bold ((t (nil)))) + (man-heading ((t (nil)))) + (man-italic ((t (nil)))) + (man-xref ((t (nil)))) + (menu ((t (nil)))) + (message-cited-text ((t (nil)))) + (message-cited-text-face ((t (nil)))) + (message-header-cc-face ((t (nil)))) + (message-header-contents ((t (nil)))) + (message-header-name-face ((t (nil)))) + (message-header-newsgroups-face ((t (nil)))) + (message-header-other-face ((t (nil)))) + (message-header-subject-face ((t (nil)))) + (message-header-to-face ((t (nil)))) + (message-header-xheader-face ((t (nil)))) + (message-headers ((t (nil)))) + (message-highlighted-header-contents ((t (nil)))) + (message-mml-face ((t (nil)))) + (message-separator-face ((t (nil)))) + (message-url ((t (nil)))) + (minibuffer-prompt ((t (nil)))) + (mmm-face ((t (nil)))) + (mode-line ((t (:bold t :background "gray" :foreground "black" +:weight bold)))) + (mode-line-inactive ((t (nil)))) + (modeline-buffer-id ((t (:background "orange" :foreground +"black")))) + (modeline-mousable ((t (:background "orange" :foreground +"black")))) + (modeline-mousable-minor-mode ((t (:background "orange" +:foreground "black")))) + (mouse ((t (nil)))) + (mpg123-face-cur ((t (nil)))) + (mpg123-face-slider ((t (nil)))) + (my-tab-face ((t (nil)))) + (nil ((t (nil)))) + (overlay-empty-face ((t (nil)))) + (p4-diff-del-face ((t (nil)))) + (paren-blink-off ((t (nil)))) + (paren-face ((t (nil)))) + (paren-face-match ((t (nil)))) + (paren-face-mismatch ((t (nil)))) + (paren-face-no-match ((t (nil)))) + (paren-match ((t (nil)))) + (paren-mismatch ((t (nil)))) + (paren-mismatch-face ((t (nil)))) + (paren-no-match-face ((t (nil)))) + (pointer ((t (nil)))) + (primary-selection ((t (nil)))) + (reb-match-0 ((t (nil)))) + (reb-match-1 ((t (nil)))) + (reb-match-2 ((t (nil)))) + (reb-match-3 ((t (nil)))) + (red ((t (nil)))) + (region ((t (:background "#7eff00" :foreground "black")))) + (right-margin ((t (nil)))) + (rpm-spec-dir-face ((t (nil)))) + (rpm-spec-doc-face ((t (nil)))) + (rpm-spec-ghost-face ((t (nil)))) + (rpm-spec-macro-face ((t (nil)))) + (rpm-spec-package-face ((t (nil)))) + (rpm-spec-tag-face ((t (nil)))) + (rpm-spec-var-face ((t (nil)))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "orange" :foreground +"black")))) + (semantic-dirty-token-face ((t (nil)))) + (semantic-intangible-face ((t (nil)))) + (semantic-read-only-face ((t (nil)))) + (semantic-unmatched-syntax-face ((t (nil)))) + (senator-intangible-face ((t (nil)))) + (senator-momentary-highlight-face ((t (nil)))) + (senator-read-only-face ((t (nil)))) + (sgml-comment-face ((t (nil)))) + (sgml-doctype-face ((t (nil)))) + (sgml-end-tag-face ((t (nil)))) + (sgml-entity-face ((t (nil)))) + (sgml-ignored-face ((t (nil)))) + (sgml-ms-end-face ((t (nil)))) + (sgml-ms-start-face ((t (nil)))) + (sgml-pi-face ((t (nil)))) + (sgml-sgml-face ((t (nil)))) + (sgml-short-ref-face ((t (nil)))) + (sgml-shortref-face ((t (nil)))) + (sgml-start-tag-face ((t (nil)))) + (sh-heredoc-face ((t (nil)))) + (shell-option-face ((t (nil)))) + (shell-output-2-face ((t (nil)))) + (shell-output-3-face ((t (nil)))) + (shell-output-face ((t (nil)))) + (shell-prompt-face ((t (nil)))) + (show-block-face1 ((t (nil)))) + (show-block-face2 ((t (nil)))) + (show-block-face3 ((t (nil)))) + (show-block-face4 ((t (nil)))) + (show-block-face5 ((t (nil)))) + (show-block-face6 ((t (nil)))) + (show-block-face7 ((t (nil)))) + (show-block-face8 ((t (nil)))) + (show-block-face9 ((t (nil)))) + (show-paren-match-face ((t (:background "orange" :foreground +"black")))) + (show-paren-mismatch-face ((t (:underline t)))) + (show-tabs-space-face ((t (nil)))) + (show-tabs-tab-face ((t (nil)))) + (smerge-base-face ((t (nil)))) + (smerge-markers-face ((t (nil)))) + (smerge-mine-face ((t (nil)))) + (smerge-other-face ((t (nil)))) + (speedbar-button-face ((t (nil)))) + (speedbar-directory-face ((t (nil)))) + (speedbar-file-face ((t (nil)))) + (speedbar-highlight-face ((t (nil)))) + (speedbar-selected-face ((t (nil)))) + (speedbar-separator-face ((t (nil)))) + (speedbar-tag-face ((t (nil)))) + (strokes-char-face ((t (nil)))) + (swbuff-current-buffer-face ((t (nil)))) + (tabbar-button-face ((t (nil)))) + (tabbar-default-face ((t (nil)))) + (tabbar-selected-face ((t (nil)))) + (tabbar-separator-face ((t (nil)))) + (tabbar-unselected-face ((t (nil)))) + (template-message-face ((t (nil)))) + (term-black ((t (nil)))) + (term-blackbg ((t (nil)))) + (term-blue ((t (nil)))) + (term-blue-bold-face ((t (nil)))) + (term-blue-face ((t (nil)))) + (term-blue-inv-face ((t (nil)))) + (term-blue-ul-face ((t (nil)))) + (term-bluebg ((t (nil)))) + (term-bold ((t (nil)))) + (term-cyan ((t (nil)))) + (term-cyan-bold-face ((t (nil)))) + (term-cyan-face ((t (nil)))) + (term-cyan-inv-face ((t (nil)))) + (term-cyan-ul-face ((t (nil)))) + (term-cyanbg ((t (nil)))) + (term-default ((t (nil)))) + (term-default-bg ((t (nil)))) + (term-default-bg-inv ((t (nil)))) + (term-default-bold-face ((t (nil)))) + (term-default-face ((t (nil)))) + (term-default-fg ((t (nil)))) + (term-default-fg-inv ((t (nil)))) + (term-default-inv-face ((t (nil)))) + (term-default-ul-face ((t (nil)))) + (term-green ((t (nil)))) + (term-green-bold-face ((t (nil)))) + (term-green-face ((t (nil)))) + (term-green-inv-face ((t (nil)))) + (term-green-ul-face ((t (nil)))) + (term-greenbg ((t (nil)))) + (term-invisible ((t (nil)))) + (term-invisible-inv ((t (nil)))) + (term-magenta ((t (nil)))) + (term-magenta-bold-face ((t (nil)))) + (term-magenta-face ((t (nil)))) + (term-magenta-inv-face ((t (nil)))) + (term-magenta-ul-face ((t (nil)))) + (term-magentabg ((t (nil)))) + (term-red ((t (nil)))) + (term-red-bold-face ((t (nil)))) + (term-red-face ((t (nil)))) + (term-red-inv-face ((t (nil)))) + (term-red-ul-face ((t (nil)))) + (term-redbg ((t (nil)))) + (term-underline ((t (nil)))) + (term-white ((t (nil)))) + (term-white-bold-face ((t (nil)))) + (term-white-face ((t (nil)))) + (term-white-inv-face ((t (nil)))) + (term-white-ul-face ((t (nil)))) + (term-whitebg ((t (nil)))) + (term-yellow ((t (nil)))) + (term-yellow-bold-face ((t (nil)))) + (term-yellow-face ((t (nil)))) + (term-yellow-inv-face ((t (nil)))) + (term-yellow-ul-face ((t (nil)))) + (term-yellowbg ((t (nil)))) + (tex-math-face ((t (nil)))) + (texinfo-heading-face ((t (nil)))) + (text-cursor ((t (nil)))) + (tool-bar ((t (nil)))) + (tooltip ((t (nil)))) + (trailing-whitespace ((t (nil)))) + (underline ((t (:underline t)))) + (variable-pitch ((t (nil)))) + (vc-annotate-face-0046FF ((t (nil)))) + (vcursor ((t (nil)))) + (vertical-divider ((t (nil)))) + (vhdl-font-lock-attribute-face ((t (nil)))) + (vhdl-font-lock-directive-face ((t (nil)))) + (vhdl-font-lock-enumvalue-face ((t (nil)))) + (vhdl-font-lock-function-face ((t (nil)))) + (vhdl-font-lock-generic-/constant-face ((t (nil)))) + (vhdl-font-lock-prompt-face ((t (nil)))) + (vhdl-font-lock-reserved-words-face ((t (nil)))) + (vhdl-font-lock-translate-off-face ((t (nil)))) + (vhdl-font-lock-type-face ((t (nil)))) + (vhdl-font-lock-variable-face ((t (nil)))) + (vhdl-speedbar-architecture-face ((t (nil)))) + (vhdl-speedbar-architecture-selected-face ((t (nil)))) + (vhdl-speedbar-configuration-face ((t (nil)))) + (vhdl-speedbar-configuration-selected-face ((t (nil)))) + (vhdl-speedbar-entity-face ((t (nil)))) + (vhdl-speedbar-entity-selected-face ((t (nil)))) + (vhdl-speedbar-instantiation-face ((t (nil)))) + (vhdl-speedbar-instantiation-selected-face ((t (nil)))) + (vhdl-speedbar-package-face ((t (nil)))) + (vhdl-speedbar-package-selected-face ((t (nil)))) + (vhdl-speedbar-subprogram-face ((t (nil)))) + (viper-minibuffer-emacs-face ((t (nil)))) + (viper-minibuffer-insert-face ((t (nil)))) + (viper-minibuffer-vi-face ((t (nil)))) + (viper-replace-overlay-face ((t (nil)))) + (viper-search-face ((t (nil)))) + (vm-xface ((t (nil)))) + (vmpc-pre-sig-face ((t (nil)))) + (vmpc-sig-face ((t (nil)))) + (w3m-anchor-face ((t (nil)))) + (w3m-arrived-anchor-face ((t (nil)))) + (w3m-header-line-location-content-face ((t (nil)))) + (w3m-header-line-location-title-face ((t (nil)))) + (white ((t (nil)))) + (widget ((t (nil)))) + (widget-button-face ((t (nil)))) + (widget-button-pressed-face ((t (nil)))) + (widget-documentation-face ((t (nil)))) + (widget-field-face ((t (nil)))) + (widget-inactive-face ((t (nil)))) + (widget-single-line-field-face ((t (nil)))) + (woman-addition-face ((t (nil)))) + (woman-bold-face ((t (nil)))) + (woman-italic-face ((t (nil)))) + (woman-unknown-face ((t (nil)))) + (x-face ((t (nil)))) + (xrdb-option-name-face ((t (nil)))) + (xref-keyword-face ((t (nil)))) + (xref-list-default-face ((t (nil)))) + (xref-list-pilot-face ((t (nil)))) + (xref-list-symbol-face ((t (nil)))) + (yellow ((t (nil)))) + (zmacs-region ((t (nil))))))) + +(defun color-theme-feng-shui () + "Color theme by walterh@rocketmail.com (www.xanadb.com), created + 2003-10-16. Evolved from color-theme-katester" + (interactive) + (color-theme-install + '(color-theme-feng-shui + ((background-color . "ivory") + (background-mode . light) + (border-color . "black") + (cursor-color . "slateblue") + (foreground-color . "black") + (mouse-color . "slateblue")) + ((help-highlight-face . underline) + (list-matching-lines-face . bold) + (view-highlight-face . highlight) + (widget-mouse-face . highlight)) + (default ((t (:stipple nil :background "ivory" :foreground "black" +:inverse-video nil :box nil :strike-through nil :overline nil +:underline nil :slant normal :weight normal :height 90 :width normal +:family "outline-courier new")))) + (bold ((t (:bold t :weight bold)))) + (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) + (border ((t (:background "black")))) + (cursor ((t (:background "slateblue" :foreground "black")))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:foreground "black")))) + (font-lock-comment-face ((t (:italic t :background "seashell" +:slant italic)))) + (font-lock-constant-face ((t (:foreground "darkblue")))) + (font-lock-doc-face ((t (:background "lemonChiffon")))) + (font-lock-function-name-face ((t (:bold t :underline t :weight +bold)))) + (font-lock-keyword-face ((t (:foreground "blue")))) + (font-lock-string-face ((t (:background "lemonChiffon")))) + (font-lock-type-face ((t (:foreground "black")))) + (font-lock-variable-name-face ((t (:foreground "black")))) + (font-lock-warning-face ((t (:bold t :foreground "Red" :weight +bold)))) + (fringe ((t (:background "grey95")))) + (header-line ((t (:bold t :weight bold :underline t :background +"grey90" :foreground "grey20" :box nil)))) + (highlight ((t (:background "mistyRose" :foreground "black")))) + (isearch ((t (:background "magenta4" :foreground +"lightskyblue1")))) + (isearch-lazy-highlight-face ((t (:background "paleturquoise")))) + (italic ((t (:italic t :slant italic)))) + (menu ((t (nil)))) + (mode-line ((t (:bold t :background "mistyRose" :foreground "navy" +:underline t :weight bold)))) + (mouse ((t (:background "slateblue")))) + (region ((t (:background "lavender" :foreground "black")))) + (scroll-bar ((t (nil)))) + (secondary-selection ((t (:background "yellow")))) + (tool-bar ((t (:background "grey75" :foreground "black" :box +(:line-width 1 :style released-button))))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv")))) + (widget-button-face ((t (:bold t :weight bold)))) + (widget-button-pressed-face ((t (:foreground "red")))) + (widget-documentation-face ((t (:foreground "dark green")))) + (widget-field-face ((t (:background "gray85")))) + (widget-inactive-face ((t (:foreground "dim gray")))) + (widget-single-line-field-face ((t (:background "gray85"))))))) + + +(defun color-theme-renegade () + "Renegade BBS styled color theme. Works well in X and terminals. +Created by Dave Benjamin Dec 23 2005." + (interactive) + (color-theme-install + '(color-theme-renegade + ((background-color . "black") + (background-mode . dark) + (border-color . "black") + (cursor-color . "black") + (foreground-color . "cyan3") + (mouse-color . "white")) + (default ((t (nil)))) + (bold ((t (:bold t :foreground "cyan" :weight bold)))) + (bold-italic ((t (:italic t :bold t :foreground "cyan" :slant italic :weight bold)))) + (fixed-pitch ((t (:family "courier")))) + (font-lock-builtin-face ((t (:bold t :foreground "cornflower blue" :weight bold)))) + (font-lock-comment-face ((t (:bold t :foreground "yellow" :weight bold)))) + (font-lock-constant-face ((t (:foreground "magenta3")))) + (font-lock-doc-face ((t (:bold t :weight bold :foreground "red")))) + (font-lock-function-name-face ((t (:foreground "gray")))) + (font-lock-keyword-face ((t (:bold t :foreground "cyan" :weight bold)))) + (font-lock-string-face ((t (:bold t :foreground "red" :weight bold)))) + (font-lock-type-face ((t (:bold t :foreground "cyan" :weight bold)))) + (font-lock-variable-name-face ((t (:foreground "cyan3")))) + (font-lock-warning-face ((t (:bold t :foreground "red" :weight bold)))) + (fringe ((t (:background "gray32")))) + (highlight ((t (:background "blue")))) + (isearch ((t (:background "blue" :foreground "cyan3")))) + (isearch-lazy-highlight-face ((t (:background "turquoise3" :foreground "black")))) + (menu ((t (nil)))) + (mode-line ((t (:bold t :background "blue3" :foreground "white" :box (:line-width -1 :style released-button) :weight bold)))) + (mouse ((t (:background "white")))) + (region ((t (:bold t :background "white" :foreground "blue" :weight bold)))) + (scroll-bar ((t (nil)))) + (trailing-whitespace ((t (:background "red")))) + (underline ((t (:underline t)))) + (variable-pitch ((t (:family "helv"))))))) + +;;; color-theme-library.el ends here diff --git a/.emacs.d/tramp b/.emacs.d/tramp new file mode 100644 index 0000000..407d593 --- /dev/null +++ b/.emacs.d/tramp @@ -0,0 +1,20 @@ +;; -*- emacs-lisp -*- +;; Tramp connection history. Don't change this file. +;; You can delete it, forcing Tramp to reapply the checks. + +((["scp" "slash" "192.168.1.90" nil] + ("uname" "Linux 2.6.33.5-112.fc13.i686") + ("test" "test") + ("remote-path" + ("/bin" "/usr/bin" "/usr/sbin" "/usr/local/bin")) + ("remote-shell" "/bin/sh") + ("~" "/home/slash") + ("file-exists" "test -e") + ("stat" "\\stat") + ("id" "/usr/bin/id") + ("gid-integer" 500) + ("local-encoding" base64-encode-region) + ("local-decoding" base64-decode-region) + ("remote-encoding" "base64") + ("remote-decoding" "base64 -d") + ("perl" "\\perl"))) diff --git a/.emacs.d/vala-mode.el b/.emacs.d/vala-mode.el new file mode 100644 index 0000000..0358790 --- /dev/null +++ b/.emacs.d/vala-mode.el @@ -0,0 +1,395 @@ +;;; vala-mode.el --- Vala mode derived mode + +;; Author: 2005 Dylan R. E. Moonfire +;; 2008 Étienne BERSAC +;; Maintainer: Étienne BERSAC +;; Created: 2008 May the 4th +;; Modified: May 2008 +;; Version: 0.1 +;; Keywords: vala languages oop + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2 of the License, or +;; (at your option) any later version. +;; +;; 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 +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: +;; +;; See http://live.gnome.org/Vala for details about Vala language. +;; +;; This is a separate mode to implement the Vala constructs and +;; font-locking. It is mostly the csharp-mode from +;; http://mfgames.com/linux/csharp-mode with vala specific keywords +;; and filename suffixes. +;; +;; Note: The interface used in this file requires CC Mode 5.30 or +;; later. + +;;; .emacs (don't put in (require 'vala-mode)) +;; (autoload 'vala-mode "vala-mode" "Major mode for editing Vala code." t) +;; (setq auto-mode-alist +;; (append '(("\\.vala$" . vala-mode)) auto-mode-alist)) + +;;; Versions: +;; +;; 0.1 : Initial version based on csharp-mode +;; + +;; This is a copy of the function in cc-mode which is used to handle +;; the eval-when-compile which is needed during other times. +(defun c-filter-ops (ops opgroup-filter op-filter &optional xlate) + ;; See cc-langs.el, a direct copy. + (unless (listp (car-safe ops)) + (setq ops (list ops))) + (cond ((eq opgroup-filter t) + (setq opgroup-filter (lambda (opgroup) t))) + ((not (functionp opgroup-filter)) + (setq opgroup-filter `(lambda (opgroup) + (memq opgroup ',opgroup-filter))))) + (cond ((eq op-filter t) + (setq op-filter (lambda (op) t))) + ((stringp op-filter) + (setq op-filter `(lambda (op) + (string-match ,op-filter op))))) + (unless xlate + (setq xlate 'identity)) + (c-with-syntax-table (c-lang-const c-mode-syntax-table) + (delete-duplicates + (mapcan (lambda (opgroup) + (when (if (symbolp (car opgroup)) + (when (funcall opgroup-filter (car opgroup)) + (setq opgroup (cdr opgroup)) + t) + t) + (mapcan (lambda (op) + (when (funcall op-filter op) + (let ((res (funcall xlate op))) + (if (listp res) res (list res))))) + opgroup))) + ops) + :test 'equal))) + +;; This inserts the bulk of the code. +(require 'cc-mode) + +;; These are only required at compile time to get the sources for the +;; language constants. (The cc-fonts require and the font-lock +;; related constants could additionally be put inside an +;; (eval-after-load "font-lock" ...) but then some trickery is +;; necessary to get them compiled.) +(eval-when-compile + (let ((load-path + (if (and (boundp 'byte-compile-dest-file) + (stringp byte-compile-dest-file)) + (cons (file-name-directory byte-compile-dest-file) load-path) + load-path))) + (load "cc-mode" nil t) + (load "cc-fonts" nil t) + (load "cc-langs" nil t))) + +(eval-and-compile + ;; Make our mode known to the language constant system. Use Java + ;; mode as the fallback for the constants we don't change here. + ;; This needs to be done also at compile time since the language + ;; constants are evaluated then. + (c-add-language 'vala-mode 'java-mode)) + +;; Java uses a series of regexes to change the font-lock for class +;; references. The problem comes in because Java uses Pascal (leading +;; space in names, SomeClass) for class and package names, but +;; Camel-casing (initial lowercase, upper case in words, +;; i.e. someVariable) for variables. +;;(error (byte-compile-dest-file)) +;;(error (c-get-current-file)) +(c-lang-defconst c-opt-after-id-concat-key + vala (if (c-lang-const c-opt-identifier-concat-key) + (c-lang-const c-symbol-start))) + +(c-lang-defconst c-basic-matchers-before + vala `( +;;;; Font-lock the attributes by searching for the +;;;; appropriate regex and marking it as TODO. + ;;,`(,(concat "\\(" vala-attribute-regex "\\)") + ;; 0 font-lock-function-name-face) + + ;; Put a warning face on the opener of unclosed strings that + ;; can't span lines. Later font + ;; lock packages have a `font-lock-syntactic-face-function' for + ;; this, but it doesn't give the control we want since any + ;; fontification done inside the function will be + ;; unconditionally overridden. + ,(c-make-font-lock-search-function + ;; Match a char before the string starter to make + ;; `c-skip-comments-and-strings' work correctly. + (concat ".\\(" c-string-limit-regexp "\\)") + '((c-font-lock-invalid-string))) + + ;; Fontify keyword constants. + ,@(when (c-lang-const c-constant-kwds) + (let ((re (c-make-keywords-re nil + (c-lang-const c-constant-kwds)))) + `((eval . (list ,(concat "\\<\\(" re "\\)\\>") + 1 c-constant-face-name))))) + + ;; Fontify all keywords except the primitive types. + ,`(,(concat "\\<" (c-lang-const c-regular-keywords-regexp)) + 1 font-lock-keyword-face) + + ;; Fontify leading identifiers in fully + ;; qualified names like "Foo.Bar". + ,@(when (c-lang-const c-opt-identifier-concat-key) + `((,(byte-compile + `(lambda (limit) + (while (re-search-forward + ,(concat "\\(\\<" ; 1 + "\\(" (c-lang-const c-symbol-key) + "\\)" ; 2 + "[ \t\n\r\f\v]*" + (c-lang-const + c-opt-identifier-concat-key) + "[ \t\n\r\f\v]*" + "\\)" + "\\(" + (c-lang-const + c-opt-after-id-concat-key) + "\\)") + limit t) + (unless (progn + (goto-char (match-beginning 0)) + (c-skip-comments-and-strings limit)) + (or (get-text-property (match-beginning 2) 'face) + (c-put-font-lock-face (match-beginning 2) + (match-end 2) + c-reference-face-name)) + (goto-char (match-end 1))))))))) + )) + +;; Vala does not allow a leading qualifier operator. It also doesn't +;; allow the ".*" construct of Java. So, we redo this regex without +;; the "\\|\\*" regex. +(c-lang-defconst c-identifier-key + vala (concat "\\(" (c-lang-const c-symbol-key) "\\)" ; 1 + (concat "\\(" + "[ \t\n\r\f\v]*" + (c-lang-const c-opt-identifier-concat-key) + "[ \t\n\r\f\v]*" + (concat "\\(" + "\\(" (c-lang-const c-symbol-key) "\\)" + "\\)") + "\\)*"))) + +;; Vala has a few rules that are slightly different than Java for +;; operators. This also removed the Java's "super" and replaces it +;; with the Vala's "base". +(c-lang-defconst c-operators + vala `((prefix "base"))) + +;; Vala directives ? +;; (c-lang-defconst c-opt-cpp-prefix +;; csharp "^\\s *#.*") + + +;; Vala uses the following assignment operators +(c-lang-defconst c-assignment-operators + vala '("=" "*=" "/=" "%=" "+=" "-=" ">>=" "<<=" + "&=" "^=" "|=" "++" "--")) + +;; This defines the primative types for Vala +(c-lang-defconst c-primitive-type-kwds + vala '("void" "char" "int" "float" "double" "string")) + +;; The keywords that define that the following is a type, such as a +;; class definition. +(c-lang-defconst c-type-prefix-kwds + vala '("class" "interface" "struct" "enum" "signal")) + +;; Type modifier keywords. They appear anywhere in types, but modifiy +;; instead create one. +(c-lang-defconst c-type-modifier-kwds + vala '("const")) + +;; Structures that are similiar to classes. +(c-lang-defconst c-class-decl-kwds + vala '("class" "interface")) + +;; The various modifiers used for class and method descriptions. +(c-lang-defconst c-modifier-kwds + vala '("public" "partial" "private" "const" "abstract" + "protected" "ref" "in" "out" "static" "virtual" + "override" "params" "internal" "weak" "owned" + "unowned")) + +;; We don't use the protection level stuff because it breaks the +;; method indenting. Not sure why, though. +(c-lang-defconst c-protection-kwds + vala nil) + +;; Define the keywords that can have something following after them. +(c-lang-defconst c-type-list-kwds + vala '("struct" "class" "interface" "is" "as" + "delegate" "event" "set" "get" "add" "remove" + "callback" "signal" "var" "default")) + +;; This allows the classes after the : in the class declartion to be +;; fontified. +(c-lang-defconst c-typeless-decl-kwds + vala '(":")) + +;; Sets up the enum to handle the list properly +(c-lang-defconst c-brace-list-decl-kwds + vala '("enum" "errordomain")) + +;; We need to remove Java's package keyword +(c-lang-defconst c-ref-list-kwds + vala '("using" "namespace" "construct")) + +;; Follow-on blocks that don't require a brace +(c-lang-defconst c-block-stmt-2-kwds + vala '("for" "if" "switch" "while" "catch" "foreach" "lock")) + +;; Statements that break out of braces +(c-lang-defconst c-simple-stmt-kwds + vala '("return" "continue" "break" "throw")) + +;; Statements that allow a label +;; TODO? +(c-lang-defconst c-before-label-kwds + vala nil) + +;; Constant keywords +(c-lang-defconst c-constant-kwds + vala '("true" "false" "null")) + +;; Keywords that start "primary expressions." +(c-lang-defconst c-primary-expr-kwds + vala '("this" "base")) + +;; We need to treat namespace as an outer block to class indenting +;; works properly. +(c-lang-defconst c-other-block-decl-kwds + vala '("namespace")) + +;; We need to include the "in" for the foreach +(c-lang-defconst c-other-kwds + vala '("in" "sizeof" "typeof")) + +(require 'cc-awk) + +(c-lang-defconst c-at-vsemi-p-fn + vala 'c-awk-at-vsemi-p) + + +(defcustom vala-font-lock-extra-types nil + "*List of extra types (aside from the type keywords) to recognize in Vala mode. +Each list item should be a regexp matching a single identifier.") + +(defconst vala-font-lock-keywords-1 (c-lang-const c-matchers-1 vala) + "Minimal highlighting for Vala mode.") + +(defconst vala-font-lock-keywords-2 (c-lang-const c-matchers-2 vala) + "Fast normal highlighting for Vala mode.") + +(defconst vala-font-lock-keywords-3 (c-lang-const c-matchers-3 vala) + "Accurate normal highlighting for Vala mode.") + +(defvar vala-font-lock-keywords vala-font-lock-keywords-3 + "Default expressions to highlight in Vala mode.") + +(defvar vala-mode-syntax-table + nil + "Syntax table used in vala-mode buffers.") +(or vala-mode-syntax-table + (setq vala-mode-syntax-table + (funcall (c-lang-const c-make-mode-syntax-table vala)))) + +(defvar vala-mode-abbrev-table nil + "Abbreviation table used in vala-mode buffers.") +(c-define-abbrev-table 'vala-mode-abbrev-table + ;; Keywords that if they occur first on a line + ;; might alter the syntactic context, and which + ;; therefore should trig reindentation when + ;; they are completed. + '(("else" "else" c-electric-continued-statement 0) + ("while" "while" c-electric-continued-statement 0) + ("catch" "catch" c-electric-continued-statement 0) + ("finally" "finally" c-electric-continued-statement 0))) + +(defvar vala-mode-map (let ((map (c-make-inherited-keymap))) + ;; Add bindings which are only useful for Vala + map) + "Keymap used in vala-mode buffers.") + +;;(easy-menu-define vala-menu vala-mode-map "Vala Mode Commands" +;; ;; Can use `vala' as the language for `c-mode-menu' +;; ;; since its definition covers any language. In +;; ;; this case the language is used to adapt to the +;; ;; nonexistence of a cpp pass and thus removing some +;; ;; irrelevant menu alternatives. +;; (cons "Vala" (c-lang-const c-mode-menu vala))) + +;;; Autoload mode trigger +(add-to-list 'auto-mode-alist '("\\.vala$" . vala-mode)) +(add-to-list 'auto-mode-alist '("\\.vapi$" . vala-mode)) + +;; Custom variables +(defcustom vala-mode-hook nil + "*Hook called by `vala-mode'." + :type 'hook + :group 'c) + +;;; The entry point into the mode +;;;###autoload +(defun vala-mode () + "Major mode for editing Vala code. +This is a simple example of a separate mode derived from CC Mode +to support a language with syntax similar to +C#/C/C++/ObjC/Java/IDL/Pike. + +The hook `c-mode-common-hook' is run with no args at mode +initialization, then `vala-mode-hook'. + +Key bindings: +\\{vala-mode-map}" + (interactive) + (kill-all-local-variables) + (c-initialize-cc-mode t) + (set-syntax-table vala-mode-syntax-table) + (setq major-mode 'vala-mode + mode-name "Vala" + local-abbrev-table vala-mode-abbrev-table + abbrev-mode t) + (use-local-map c-mode-map) + ;; `c-init-language-vars' is a macro that is expanded at compile + ;; time to a large `setq' with all the language variables and their + ;; customized values for our language. + (c-init-language-vars vala-mode) + ;; `c-common-init' initializes most of the components of a CC Mode + ;; buffer, including setup of the mode menu, font-lock, etc. + ;; There's also a lower level routine `c-basic-common-init' that + ;; only makes the necessary initialization to get the syntactic + ;; analysis and similar things working. + (c-common-init 'vala-mode) + ;;(easy-menu-add vala-menu) + (c-set-style "linux") + (setq indent-tabs-mode t) + (setq c-basic-offset 4) + (setq tab-width 4) + (c-toggle-auto-newline -1) + (c-toggle-hungry-state -1) + (run-hooks 'c-mode-common-hook) + (run-hooks 'vala-mode-hook) + (c-update-modeline)) + +(provide 'vala-mode) + +;;; vala-mode.el ends here diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..91c6753 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*~ +*session.* +*\#* +.emacs.d/ac-comphist.dat \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..538f3d5 --- /dev/null +++ b/README @@ -0,0 +1,7 @@ +To use these settings you need: + * Pyflakes + +To install this in Ubuntu use: + sudo apt-get install pyflakes +To install this in Fedora use: + su -c "yum install pyflakes" \ No newline at end of file diff --git a/install.bat b/install.bat new file mode 100644 index 0000000..3dfeb83 --- /dev/null +++ b/install.bat @@ -0,0 +1,5 @@ +@echo off +REM An install script for windows + +copy /Y .emacs %APPDATA%\ +copy /Y .emacs.d %APPDATA%\ \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..030e7a0 --- /dev/null +++ b/install.sh @@ -0,0 +1,9 @@ +INSTALL_BASEFILE=`readlink -f $0` +INSTALL_BASEDIR=`dirname $INSTALL_BASEFILE` + +ln -sf $INSTALL_BASEDIR/.emacs $HOME/.emacs + +if [ -d $HOME/.emacs.d ]; then + rm -rf $HOME/.emacs.d +fi +ln -sf $INSTALL_BASEDIR/.emacs.d $HOME/ \ No newline at end of file From 104692129fd34a52dd967095f57371d1781c9172 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Wed, 30 Jun 2010 21:21:34 +0200 Subject: [PATCH 02/24] made install.sh executable added .Xdefaults --- .Xdefaults | 44 ++++++++++++++++++++++++++++++++++++++++++++ install.sh | 7 +++++-- 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 .Xdefaults mode change 100644 => 100755 install.sh diff --git a/.Xdefaults b/.Xdefaults new file mode 100644 index 0000000..9bc9e1b --- /dev/null +++ b/.Xdefaults @@ -0,0 +1,44 @@ +! General +urxvt*loginShell: true +urxvt*scrollBar: false +urxvt*secondaryScroll: true +urxvt*saveLines: 65535 +urxvt*cursorBlink: false +urxvt*urgentOnBell: true + +! Extensions +urxvt*perl-lib: /usr/lib/urxvt/perl/ +urxvt*perl-ext-common: default,matcher,searchable-scrollback +urxvt*urlLauncher: chromium-browser +urxvt*matcher.button: 1 +! - catch ugly URLs +!urxvt.cutchars: `()'*<>[]{|}" + +! Appearance +! - use a bitmap font +urxvt*font: -xos4-terminus-medium-*-*-*-14-*-*-*-*-*-*-* +urxvt*boldFont: -xos4-terminux-bold-*-*-*-14-*-*-*-*-*-*-* +! - cursor +urxvt*cursorColor: #DCDCCC +! - pseudo transparency +urxvt*shading: 20 +urxvt*transparent: true +! - color scheme +urxvt.background: #000000 +urxvt.foreground: #EBEBFF +urxvt*color0: #000000 ! black +urxvt*color1: #E01010 ! red +urxvt*color2: #00AA00 ! green +urxvt*color3: #FFFF00 ! yellow +urxvt*color4: #112037 ! blue +urxvt*color5: #A020F0 ! purple +urxvt*color6: #5B5BC7 ! cyan +urxvt*color7: #FEFEFE ! white +urxvt*color8: #6A6A6A ! bright-black +urxvt*color9: #FF5555 ! bright-red +urxvt*color10: #90EE90 ! bright-green +urxvt*color11: #FFFF2F ! bright-yellow +urxvt*color12: #5B5BC7 ! bright-blue +urxvt*color13: #E628BA ! bright-purple +urxvt*color14: #7D7DFB ! bright-cyan +urxvt*color15: #FFFFFF ! bright-white \ No newline at end of file diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 index 030e7a0..bcbbf7b --- a/install.sh +++ b/install.sh @@ -1,9 +1,12 @@ INSTALL_BASEFILE=`readlink -f $0` INSTALL_BASEDIR=`dirname $INSTALL_BASEFILE` +# EMACS ln -sf $INSTALL_BASEDIR/.emacs $HOME/.emacs - if [ -d $HOME/.emacs.d ]; then rm -rf $HOME/.emacs.d fi -ln -sf $INSTALL_BASEDIR/.emacs.d $HOME/ \ No newline at end of file +ln -sf $INSTALL_BASEDIR/.emacs.d $HOME/ + +# XDEFAULTS +ln -sf $INSTALL_BASEDIR/.Xdefaults $HOME/.Xdefaults \ No newline at end of file From c38f147ead1d57f48a75df8653ed3ed1c12eebd3 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Thu, 1 Jul 2010 22:28:59 +0200 Subject: [PATCH 03/24] Added xmodmap Added rainbow.el to emacs Showing some extra messages with install.bat and install.sh Added some elisp to check which distro I'm on at that moment, though I don't yet use it --- .Xdefaults | 18 +--- .Xmodmap | 1 + .emacs.d/include.el | 2 + .emacs.d/ports.el | 29 ++++++ .emacs.d/rainbow-mode.el | 207 +++++++++++++++++++++++++++++++++++++++ install.bat | 2 + install.sh | 16 ++- 7 files changed, 256 insertions(+), 19 deletions(-) create mode 100644 .Xmodmap create mode 100644 .emacs.d/ports.el create mode 100644 .emacs.d/rainbow-mode.el diff --git a/.Xdefaults b/.Xdefaults index 9bc9e1b..e1c317c 100644 --- a/.Xdefaults +++ b/.Xdefaults @@ -25,20 +25,4 @@ urxvt*shading: 20 urxvt*transparent: true ! - color scheme urxvt.background: #000000 -urxvt.foreground: #EBEBFF -urxvt*color0: #000000 ! black -urxvt*color1: #E01010 ! red -urxvt*color2: #00AA00 ! green -urxvt*color3: #FFFF00 ! yellow -urxvt*color4: #112037 ! blue -urxvt*color5: #A020F0 ! purple -urxvt*color6: #5B5BC7 ! cyan -urxvt*color7: #FEFEFE ! white -urxvt*color8: #6A6A6A ! bright-black -urxvt*color9: #FF5555 ! bright-red -urxvt*color10: #90EE90 ! bright-green -urxvt*color11: #FFFF2F ! bright-yellow -urxvt*color12: #5B5BC7 ! bright-blue -urxvt*color13: #E628BA ! bright-purple -urxvt*color14: #7D7DFB ! bright-cyan -urxvt*color15: #FFFFFF ! bright-white \ No newline at end of file +urxvt.foreground: #EBEBFF \ No newline at end of file diff --git a/.Xmodmap b/.Xmodmap new file mode 100644 index 0000000..9109241 --- /dev/null +++ b/.Xmodmap @@ -0,0 +1 @@ +pointer = 3 2 1 \ No newline at end of file diff --git a/.emacs.d/include.el b/.emacs.d/include.el index 9000147..35c273a 100644 --- a/.emacs.d/include.el +++ b/.emacs.d/include.el @@ -11,6 +11,8 @@ "~/.emacs.d/sqlplus.el" "A Major mode for communicating with Oracle" t) (autoload 'batch-mode "~/.emacs.d/batch-mode.el" "A Major mode for editing Batch files" t) +(autoload 'rainbow-mode + "~/.emacs.d/rainbow-mode.el" "A Minor mode for showing colors inline" t) (load-file "~/.emacs.d/auto-complete-config.el") (require 'auto-complete-config) \ No newline at end of file diff --git a/.emacs.d/ports.el b/.emacs.d/ports.el new file mode 100644 index 0000000..eec3854 --- /dev/null +++ b/.emacs.d/ports.el @@ -0,0 +1,29 @@ +;; function copied from dim-ports.al by Dimitri Fontaine +;; http://git.naquadah.org/?p=~dim/emacs.d.git;a=summary +(defun lsb-release (&optional property) + "Parse lsb-release output and return an alist, or the value for the given property" + (when (file-executable-p "/usr/bin/lsb_release") + (let* ((lsbr (shell-command-to-string "/usr/bin/lsb_release -a 2>/dev/null")) + (props (split-string lsbr "[:\n]" t)) + (kv)) + (while (>= (length props) 2) + ;; Don't keep extra spaces. This way seems like the easy one in elisp. + (let ((key (mapconcat 'identity (split-string (car props)) " ")) + (val (mapconcat 'identity (split-string (cadr props)) " "))) + (setq kv (add-to-list 'kv (cons key val))) + (setq props (cddr props)))) + (if property + (cdr (assoc property (lsb-release))) + kv)))) + +;; function copied from dim-ports.al by Dimitri Fontaine +;; http://git.naquadah.org/?p=~dim/emacs.d.git;a=summary +(defmacro when-running-ubuntu (&rest body) + "eval body only when running under Ubuntu" + (when (equal (lsb-release "Distributor ID") "Ubuntu") ,@body)) + +;; function adapted from dim-ports.al by Dimitri Fontaine +;; http://git.naquadah.org/?p=~dim/emacs.d.git;a=summary +(defmacro when-running-fedora (&rest body) + "eval body only when running under Fedora" + (when (equal (lsb-release "Distributor ID") "Fedora") ,@body)) \ No newline at end of file diff --git a/.emacs.d/rainbow-mode.el b/.emacs.d/rainbow-mode.el new file mode 100644 index 0000000..8207abc --- /dev/null +++ b/.emacs.d/rainbow-mode.el @@ -0,0 +1,207 @@ +;;; rainbow-mode.el --- prints color strings with colored background + +;; Copyright (C) 2010 Julien Danjou + +;; Author: Julien Danjou +;; Keywords: strings, faces + +;; This file is NOT part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs 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 +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: +;; This minor mode will add background to strings that matches color names. +;; i.e. +;; #0000ff +;; Will be printed in white with a blue background. +;; + +;;; Code: + +(eval-when-compile + (require 'cl)) + +(require 'regexp-opt) +(require 'faces) + +(defgroup rainbow nil + "Show color strings with a background color." + :tag "Rainbow" + :group 'help) + +;; Hexadecimal colors +(defvar rainbow-hexadecimal-colors-font-lock-keywords + '("#[0-9a-fA-F]\\{3\\}[0-9a-fA-F]\\{3\\}?" + (0 (rainbow-colorize-itself))) + "Font-lock keywords to add for hexadecimal colors.") + +;; rgb() colors +(defvar rainbow-html-rgb-colors-font-lock-keywords + '(("rgb(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*)" + (0 (rainbow-colorize-rgb))) + ("rgba(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*[0-9]\\{1,3\\}\s*%?\s*)" + (0 (rainbow-colorize-rgb)))) + "Font-lock keywords to add for RGB colors.") + +;; HTML colors name +(defvar rainbow-html-colors-font-lock-keywords nil + "Font-lock keywords to add for HTML colors.") +(make-variable-buffer-local 'rainbow-html-colors-font-lock-keywords) + +(defcustom rainbow-html-colors-alist + '(("black" . "#000000") + ("silver" . "#C0C0C0") + ("gray" . "#808080") + ("white" . "#FFFFFF") + ("maroon" . "#800000") + ("red" . "#FF0000") + ("purple" . "#800080") + ("fuchsia" . "#FF00FF") + ("green" . "#008000") + ("lime" . "#00FF00") + ("olive" . "#808000") + ("yellow" . "#FFFF00") + ("navy" . "#000080") + ("blue" . "#0000FF") + ("teal" . "#008080") + ("aqua" . "#00FFFF")) + "Alist of HTML colors. +Each entry should have the form (COLOR-NAME . HEXADECIMAL-COLOR)." + :group 'rainbow) + +(defcustom rainbow-html-colors-major-mode-list + '(html-mode css-mode php-mode nxml-mode xml-mode) + "List of major mode where HTML colors are enabled when +`rainbow-html-colors' is set to auto." + :group 'rainbow) + +(defcustom rainbow-html-colors 'auto + "When to enable HTML colors. +If set to t, the HTML colors will be enabled. If set to nil, the +HTML colors will not be enabled. If set to auto, the HTML colors +will be enabled if a major mode has been detected from the +`rainbow-html-colors-major-mode-list'." + :group 'rainbow) + +;; X colors +(defvar rainbow-x-colors-font-lock-keywords + `(,(regexp-opt (x-defined-colors) 'words) + (0 (rainbow-colorize-itself))) + "Font-lock keywords to add for X colors.") + +(defcustom rainbow-x-colors-major-mode-list + '(emacs-lisp-mode lisp-interaction-mode c-mode c++-mode java-mode) + "List of major mode where X colors are enabled when +`rainbow-x-colors' is set to auto." + :group 'rainbow) + +(defcustom rainbow-x-colors 'auto + "When to enable X colors. +If set to t, the X colors will be enabled. If set to nil, the +X colors will not be enabled. If set to auto, the X colors +will be enabled if a major mode has been detected from the +`rainbow-x-colors-major-mode-list'." + :group 'rainbow) + +;; Functions +(defun rainbow-colorize-match (color) + "Return a matched string propertized with a face whose +background is COLOR. The foreground is computed using +`rainbow-color-luminance', and is either white or black." + (put-text-property + (match-beginning 0) (match-end 0) + 'face `((:foreground ,(if (> 128.0 (rainbow-x-color-luminance color)) + "white" "black")) + (:background ,color)))) + +(defun rainbow-colorize-itself () + "Colorize a match with itself." + (rainbow-colorize-match (match-string-no-properties 0))) + +(defun rainbow-colorize-by-assoc (assoc-list) + "Colorize a match with its association from ASSOC-LIST." + (rainbow-colorize-match (cdr (assoc (match-string-no-properties 0) assoc-list)))) + +(defun rainbow-rgb-relative-to-absolute (number) + "Convert a relative NUMBER to absolute. If NUMBER is absolute, return NUMBER. +This will convert \"80 %\" to 204, \"100 %\" to 255 but \"123\" to \"123\"" + (let ((string-length (- (length number) 1))) + ;; Is this a number with %? + (if (eq (elt number string-length) ?%) + (/ (* (string-to-number (substring number 0 string-length)) 255) 100) + (string-to-number number)))) + +(defun rainbow-colorize-rgb () + "Colorize a match with itself." + (let ((r (rainbow-rgb-relative-to-absolute (match-string-no-properties 1))) + (g (rainbow-rgb-relative-to-absolute (match-string-no-properties 2))) + (b (rainbow-rgb-relative-to-absolute (match-string-no-properties 3)))) + (rainbow-colorize-match (format "#%02X%02X%02X" r g b)))) + +(defun rainbow-color-luminance (red green blue) + "Calculate the luminance of color composed of RED, BLUE and GREEN." + (floor (+ (* .2126 red) (* .7152 green) (* .0722 blue)) 256)) + +(defun rainbow-x-color-luminance (color) + "Calculate the luminance of a color string (e.g. \"#ffaa00\", \"blue\")." + (let* ((values (x-color-values color)) + (r (car values)) + (g (cadr values)) + (b (caddr values))) + (rainbow-color-luminance r g b))) + +(defun rainbow-turn-on () + "Turn on raibow-mode." + (font-lock-add-keywords nil + (list rainbow-hexadecimal-colors-font-lock-keywords)) + ;; Activate X colors? + (when (or (eq rainbow-x-colors t) + (and (eq rainbow-x-colors 'auto) + (memq major-mode rainbow-x-colors-major-mode-list))) + (font-lock-add-keywords nil + (list rainbow-x-colors-font-lock-keywords))) + ;; Activate HTML colors? + (when (or (eq rainbow-html-colors t) + (and (eq rainbow-html-colors 'auto) + (memq major-mode rainbow-html-colors-major-mode-list))) + (setq rainbow-html-colors-font-lock-keywords + `(,(regexp-opt (mapcar 'car rainbow-html-colors-alist) 'words) + (0 (rainbow-colorize-by-assoc rainbow-html-colors-alist)))) + (font-lock-add-keywords nil + `(,rainbow-html-colors-font-lock-keywords + ,@rainbow-html-rgb-colors-font-lock-keywords)))) + +(defun rainbow-turn-off () + "Turn off rainbow-mode." + (font-lock-remove-keywords + nil + (list + rainbow-hexadecimal-colors-font-lock-keywords + rainbow-html-colors-font-lock-keywords + rainbow-x-colors-font-lock-keywords + rainbow-html-rgb-colors-font-lock-keywords))) + +;;;###autoload +(define-minor-mode rainbow-mode + "Colorize strings that represent colors. +This will fontify with colors the string like \"#aabbcc\" or \"blue\"" + :lighter " Rbow" + (progn + (if rainbow-mode + (rainbow-turn-on) + (rainbow-turn-off)) + ;; Turn on font lock + (font-lock-mode 1))) + +(provide 'rainbow-mode) diff --git a/install.bat b/install.bat index 3dfeb83..e3c524e 100644 --- a/install.bat +++ b/install.bat @@ -1,5 +1,7 @@ @echo off REM An install script for windows +echo "Copying .emacs to %APPDATA%\\" copy /Y .emacs %APPDATA%\ +echo "Copying .emacs.d to %APPDATA%\\" copy /Y .emacs.d %APPDATA%\ \ No newline at end of file diff --git a/install.sh b/install.sh index bcbbf7b..3e1a96a 100755 --- a/install.sh +++ b/install.sh @@ -2,11 +2,23 @@ INSTALL_BASEFILE=`readlink -f $0` INSTALL_BASEDIR=`dirname $INSTALL_BASEFILE` # EMACS +echo "Linking $INSTALL_BASEDIR/.emacs to $HOME/.emacs" ln -sf $INSTALL_BASEDIR/.emacs $HOME/.emacs if [ -d $HOME/.emacs.d ]; then - rm -rf $HOME/.emacs.d + if [ -d $HOME/.emacs.d_backup ]; then + echo "Removing old $HOME/.emacs.d_backup" + rm -rf $HOME/.emacs.d_backup + fi + echo "Moving old $HOME/.emacs.d" + mv $HOME/.emacs.d $HOME/.emacs.d_backup fi +echo "Linking $INSTALL_BASEDIR/.emacs to $HOME/.emacs" ln -sf $INSTALL_BASEDIR/.emacs.d $HOME/ # XDEFAULTS -ln -sf $INSTALL_BASEDIR/.Xdefaults $HOME/.Xdefaults \ No newline at end of file +echo "Linking $INSTALL_BASEDIR/.Xdefaults to $HOME/.Xdefaults" +ln -sf $INSTALL_BASEDIR/.Xdefaults $HOME/.Xdefaults + +# XMODMAP +echo "Linking $INSTALL_BASEDIR/.Xmodmap to $HOME/.Xmodmap" +ln -sf $INSTALL_BASEDIR/.Xmodmap $HOME/.Xmodmap \ No newline at end of file From 637b8976657fbcee2fa8e3d46c71b909e6f7318a Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 6 Jul 2010 20:42:22 +0200 Subject: [PATCH 04/24] Added conkerorrc --- .conkerorrc | 3 +++ install.sh | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .conkerorrc diff --git a/.conkerorrc b/.conkerorrc new file mode 100644 index 0000000..28262da --- /dev/null +++ b/.conkerorrc @@ -0,0 +1,3 @@ +// -*- mode: javascript -*- +require("new-tabs.js"); +require("clicks-in-new-buffer-button.js"); \ No newline at end of file diff --git a/install.sh b/install.sh index 3e1a96a..18a2ba4 100755 --- a/install.sh +++ b/install.sh @@ -21,4 +21,8 @@ ln -sf $INSTALL_BASEDIR/.Xdefaults $HOME/.Xdefaults # XMODMAP echo "Linking $INSTALL_BASEDIR/.Xmodmap to $HOME/.Xmodmap" -ln -sf $INSTALL_BASEDIR/.Xmodmap $HOME/.Xmodmap \ No newline at end of file +ln -sf $INSTALL_BASEDIR/.Xmodmap $HOME/.Xmodmap + +# conkeror +echo "Linking $INSTALL_BASEDIR/.conkerorrc to $HOME/.conkerorrc" +ln -sf $INSTALL_BASEDIR/.conkerorrc $HOME/.conkerorrc \ No newline at end of file From 8bd0382047826ebb65de9f75ebe53a17bf3dc141 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 6 Jul 2010 23:44:38 +0200 Subject: [PATCH 05/24] Added some conkerorrc stuff --- .conkerorrc | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/.conkerorrc b/.conkerorrc index 28262da..e9fea2a 100644 --- a/.conkerorrc +++ b/.conkerorrc @@ -1,3 +1,102 @@ // -*- mode: javascript -*- require("new-tabs.js"); -require("clicks-in-new-buffer-button.js"); \ No newline at end of file +require("clicks-in-new-buffer.js"); + +// STYLE +/*let (sheet = get_home_directory()) { + sheet.append(".conkerorrc.d"); + sheet.append("stylesheets"); + sheet.append("tabs.css"); + register_user_stylesheet(make_uri(sheet)); +}*/ +function test(window) +{ + var test = window.tab2-bar; + window.buffers.container.removeChild(test); +} + +//add_hook("window_initialize_hook", test); + +// VARIABLES +// Make middle mouse button open new tab in background +clicks_in_new_buffer_target = OPEN_NEW_BUFFER_BACKGROUND; + +// WEBJUMPS +define_webjump("delicious", + "http://delicious.com/search?p=linux&lc=0&context=userposts%7Cslashed%7C", + $alternative="http://delicious.com/slashed"); +define_webjump("gmail", + "https://mail.google.com/mail/#search/%s"); +define_webjump("greader", + "http://www.google.com/reader/view/#search/%s/"); +define_webjump("github", + "http://github.com/search?q=%s", + $alternative="http://github.com/ryuslash/"); +define_webjump("archwiki", + "http://wiki.archlinux.org/index.php?search=%s"); +define_webjump("fedorawiki", + "https://fedoraproject.org/wiki/search=%s"); + +// FUNCTIONS +interactive("delicious-post", + "bookmark the page via delicious", + function (I) { + check_buffer(I.buffer, content_buffer); + let posturl = 'https://api.del.icio.us/v1/posts/add?&url=' + + encodeURIComponent( + load_spec_uri_string( + load_spec(I.buffer.top_frame))) + + "&description=" + + encodeURIComponent( + yield I.minibuffer.read( + $prompt = "name (required): ", + $initial_value = I.buffer.title)) + + "&tags=" + + encodeURIComponent( + yield I.minibuffer.read( + $prompt = "tags (space delimited): ")) + + "&extended=" + + encodeURIComponent( + yield I.minibuffer.read( + $prompt = "extended description: ")); + + try { + var content = yield send_http_request( + load_spec({uri: posturl})); + I.window.minibuffer.message(content.responseText); + } catch (e) { } + }); + +interactive("delicious-post-link", + "bookmar the link via delicious", + function (I) { + bo = yield read_browser_object(I); + mylink = load_spec_uri_string( + load_spec(encodeURIComponent(bo))); + check_buffer(I.buffer, content_buffer); + let postlinkurl = "https://api.del.icio.us/v1/posts/add?&yrl=" + + mylink + + "&description=" + + encodeURIComponent( + yield I.minibuffer.read( + $prompt = "name (required): ", + $initial_value = bo.textContent)) + + "&tags=" + + encodeURIComponent( + yield I.minibuffer.read( + $prompt = "tags (space delimited): ")) + + "&extended=" + + encodeURIComponent( + yield I.minibuffer.read( + $prompt = "extended description: ")); + + try { + var content = yield send_http_request( + load_spec({uri: postlinkurl})); + I.window.minibuffer.message(content.responseText); + } catch (e) { } + }, $browser_object = browser_object_links); + +// KEYMAPPINGS +define_key(default_global_keymap, "p", "delicious-post"); +define_key(default_global_keymap, "P", "delicious-post-link"); \ No newline at end of file From eac95c05d706151e79a272ce6f75fdfdcc0ef4ac Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 13 Jul 2010 09:05:19 +0200 Subject: [PATCH 06/24] Modified the delicious webjump --- .conkerorrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.conkerorrc b/.conkerorrc index e9fea2a..54a350d 100644 --- a/.conkerorrc +++ b/.conkerorrc @@ -23,7 +23,7 @@ clicks_in_new_buffer_target = OPEN_NEW_BUFFER_BACKGROUND; // WEBJUMPS define_webjump("delicious", - "http://delicious.com/search?p=linux&lc=0&context=userposts%7Cslashed%7C", + "http://delicious.com/search?p=%s&lc=0&context=userposts%7Cslashed%7C", $alternative="http://delicious.com/slashed"); define_webjump("gmail", "https://mail.google.com/mail/#search/%s"); From 53865d0aa32ec5810d7f6e2069d8a96ebf696998 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 13 Jul 2010 15:25:54 +0200 Subject: [PATCH 07/24] Modified (improved) my emacs theme Added autopair.el --- .emacs | 18 +- .emacs.d/autopair.el | 1036 +++++++++++++++++++++++++++++++++++++++ .emacs.d/include.el | 2 +- .emacs.d/slash_theme.el | 36 +- 4 files changed, 1072 insertions(+), 20 deletions(-) create mode 100644 .emacs.d/autopair.el diff --git a/.emacs b/.emacs index 356e464..88c2afd 100644 --- a/.emacs +++ b/.emacs @@ -15,6 +15,9 @@ ; be old (fset 'yes-or-no-p 'y-or-n-p) ; don't want to have to type yes or no +;; Autopair Mode +(autopair-global-mode) + ;; Vala Mode (add-to-list 'auto-mode-alist '("\\.vala$" . vala-mode)) (add-to-list 'auto-mode-alist '("\\.vapi$" . vala-mode)) @@ -32,4 +35,17 @@ ;; Autocomplete (add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict") -(ac-config-default) \ No newline at end of file +(ac-config-default) + +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) diff --git a/.emacs.d/autopair.el b/.emacs.d/autopair.el new file mode 100644 index 0000000..31626f2 --- /dev/null +++ b/.emacs.d/autopair.el @@ -0,0 +1,1036 @@ +;;; autopair.el --- Automagically pair braces and quotes like TextMate + +;; Copyright (C) 2009,2010 Joao Tavora + +;; Author: Joao Tavora +;; Keywords: convenience, emulations +;; X-URL: http://autopair.googlecode.com +;; URL: http://autopair.googlecode.com +;; EmacsWiki: AutoPairs +;; Version: 0.4 +;; Revision: $Rev$ ($LastChangedDate$) + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; 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 +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; +;; Another stab at making braces and quotes pair like in +;; TextMate: +;; +;; * Opening braces/quotes are autopaired; +;; * Closing braces/quotes are autoskipped; +;; * Backspacing an opening brace/quote autodeletes its adjacent pair. +;; * Newline between newly-opened brace pairs open an extra indented line. +;; +;; Autopair deduces from the current syntax table which characters to +;; pair, skip or delete. +;; +;;; Installation: +;; +;; (require 'autopair) +;; (autopair-global-mode) ;; to enable in all buffers +;; +;; To enable autopair in just some types of buffers, comment out the +;; `autopair-global-mode' and put autopair-mode in some major-mode +;; hook, like: +;; +;; (add-hook 'c-mode-common-hook #'(lambda () (autopair-mode))) +;; +;; Alternatively, do use `autopair-global-mode' and create +;; *exceptions* using the `autopair-dont-activate' local variable, +;; like: +;; +;; (add-hook 'c-mode-common-hook #'(lambda () (setq autopair-dont-activate t))) +;; +;;; Use: +;; +;; The extension works by rebinding the braces and quotes keys, but +;; can still be minimally intrusive, since the original binding is +;; always called as if autopair did not exist. +;; +;; The decision of which keys to actually rebind is taken at +;; minor-mode activation time, based on the current major mode's +;; syntax tables. To achieve this kind of behaviour, an emacs +;; variable `emulation-mode-map-alists' was used. +;; +;; If you set `autopair-pair-criteria' and `autopair-skip-criteria' to +;; 'help-balance (which, by the way, is the default), braces are not +;; autopaired/autoskiped in all situations; the decision to autopair +;; or autoskip a brace is taken according to the following table: +;; +;; +---------+------------+-----------+-------------------+ +;; | 1234567 | autopair? | autoskip? | notes | +;; +---------+------------+-----------+-------------------+ +;; | (()) | yyyyyyy | ---yy-- | balanced | +;; +---------+------------+-----------+-------------------+ +;; | (())) | ------y | ---yyy- | too many closings | +;; +---------+------------+-----------+-------------------+ +;; | ((()) | yyyyyyy | ------- | too many openings | +;; +---------+------------+-----------+-------------------+ +;; +;; The table is read like this: in a buffer with 7 characters laid out +;; like the first column, an "y" marks points where an opening brace +;; is autopaired and in which places would a closing brace be +;; autoskipped. +;; +;; Quote pairing tries to support similar "intelligence", but is less +;; deterministic. Some inside-string or inside-comment situations may +;; not always behave how you intend them to. +;; +;; The variable `autopair-autowrap' tells autopair to automatically +;; wrap the selection region with the delimiters you're trying to +;; insert. This is done conditionally based of syntaxes of the two +;; ends of the selection region. It is compatible with `cua-mode's +;; typing-deletes-selection behaviour. This feature is probably still +;; a little unstable, hence `autopair-autowrap' defaults to nil. +;; +;; If you find the paren-blinking annoying, turn `autopair-blink' to +;; nil. +;; +;; For lisp-programming you might also like `autopair-skip-whitespace'. +;; +;; For further customization have a look at `autopair-dont-pair', +;; `autopair-handle-action-fns' and `autopair-extra-pair'. +;; +;; `autopair-dont-pair' lets you define special cases of characters +;; you don't want paired. Its default value skips pairing +;; single-quote characters when inside a comment literal, even if the +;; language syntax tables does pair these characters. +;; +;; (defvar autopair-dont-pair `(:string (?') :comment (?')) +;; +;; As a further example, to also prevent the '{' (opening brace) +;; character from being autopaired in C++ comments use this in your +;; .emacs. +;; +;; (add-hook 'c++-mode-hook +;; #'(lambda () +;; (push ?{ +;; (getf autopair-dont-pair :comment)))) +;; +;; `autopair-handle-action-fns' lets you override/extend the actions +;; taken by autopair after it decides something must be paired,skipped +;; or deleted. To work with triple quoting in python mode, you can use +;; this for example: +;; +;; (add-hook 'python-mode-hook +;; #'(lambda () +;; (setq autopair-handle-action-fns +;; (list #'autopair-default-handle-action +;; #'autopair-python-triple-quote-action)))) +;; +;; It's also useful to deal with latex's mode use of the "paired +;; delimiter" syntax class. +;; +;; (add-hook 'latex-mode-hook +;; #'(lambda () +;; (set (make-local-variable 'autopair-handle-action-fns) +;; (list #'autopair-default-handle-action +;; #'autopair-latex-mode-paired-delimiter-action)))) +;; +;; `autopair-extra-pairs' lets you define extra pairing and skipping +;; behaviour for pairs not programmed into the syntax table. Watch +;; out, this is work-in-progress, a little unstable and does not help +;; balancing at all. To have '<' and '>' pair in c++-mode buffers, but +;; only in code, use: +;; +;; (add-hook 'c++-mode-hook +;; #'(lambda () +;; (push '(?< . ?>) +;; (getf autopair-extra-pairs :code)))) +;; +;; if you program in emacs-lisp you might also like the following to +;; pair backtick and quote +;; +;; (add-hook 'emacs-lisp-mode-hook +;; #'(lambda () +;; (push '(?` . ?') +;; (getf autopair-extra-pairs :comment)) +;; (push '(?` . ?') +;; (getf autopair-extra-pairs :string)))) +;; +;;; Bugs: +;; +;; * Quote pairing/skipping inside comments is not perfect... +;; +;; * See the last section on monkey-patching for the `defadvice' +;; tricks used to make `autopair-autowrap' work with `cua-mode' and +;; `delete-selection-mode'. +;; +;;; Credit: +;; +;; Thanks Ed Singleton for early testing. +;; +;;; Code: + +;; requires +(require 'cl) + +;; variables +(defvar autopair-pair-criteria 'help-balance + "How to decide whether to pair opening brackets or quotes. + +Set this to 'always to always pair, or 'help-balance to be more +criterious when pairing.") + +(defvar autopair-skip-criteria 'help-balance + "How to decide whether to skip closing brackets or quotes. + +Set this to 'always to always skip, or 'help-balance to be more +criterious when skipping.") + +(defvar autopair-emulation-alist nil + "A dinamic keymap for autopair set mostly from the current + syntax table.") + +(defvar autopair-dont-activate nil + "If non-nil `autopair-global-mode' does not activate in buffer") +(make-variable-buffer-local 'autopair-dont-activate) + +(defvar autopair-extra-pairs nil + "Extra pairs for which to use pairing. + +It's a Common-lisp-style even-numbered property list, each pair +of elements being of the form (TYPE , PAIRS). PAIRS is a mixed +list whose elements are cons cells, which look like cells look +like (OPENING . CLOSING). Autopair pairs these like +parenthesis. + +TYPE can be one of: + +:string : whereby PAIRS will be considered only when inside a + string literal + +:comment : whereby PAIRS will be considered only when inside a comment + +:code : whereby PAIRS will be considered only when outisde a + string and a comment. + +:everywhere : whereby PAIRS will be considered in all situations + +In Emacs-lisp, this might be useful + +(add-hook 'emacs-lisp-mode-hook + #'(lambda () + (setq autopair-extra-pairs `(:comment ((?`. ?')))))) + + +Note that this does *not* work for single characters, +e.x. characters you want to behave as quotes. See the +docs/source comments for more details.") + +(make-variable-buffer-local 'autopair-extra-pairs) + +(defvar autopair-dont-pair `(:string (?') :comment (?')) + "Characters for which to skip any pairing behaviour. + +This variable overrides `autopair-pair-criteria' and +`autopair-extra-pairs'. It does not + (currently) affect the skipping behaviour. + +It's a Common-lisp-style even-numbered property list, each pair +of elements being of the form (TYPE , CHARS). CHARS is a list of +characters and TYPE can be one of: + +:string : whereby characters in CHARS will not be autopaired when + inside a string literal + +:comment : whereby characters in CHARS will not be autopaired when + inside a comment + +:never : whereby characters in CHARS won't even have their + bindings replaced by autopair's. This particular option + should be used for troubleshooting and requires + `autopair-mode' to be restarted to have any effect.") +(make-variable-buffer-local 'autopair-dont-pair) + +(defvar autopair-action nil + "Autopair action decided on by last interactive autopair command, or nil. + +When autopair decides on an action this is a list whose first +three elements are (ACTION PAIR POS-BEFORE). + +ACTION is one of `opening', `insert-quote', `skip-quote', +`backspace', `newline' or `paired-delimiter'. PAIR is the pair of +the `last-input-event' character, if applicable. POS-BEFORE is +value of point before action command took place .") + + +(defvar autopair-wrap-action nil + "Autowrap action decided on by autopair, if any. + +When autopair decides on an action this is a list whose first +three elements are (ACTION PAIR POS-BEFORE REGION-BEFORE). + +ACTION can only be `wrap' currently. PAIR and POS-BEFORE +delimiter are as in `autopair-action'. REGION-BEFORE is a cons +cell with the bounds of the region before the command takes +place") + +(defvar autopair-handle-action-fns '() + "Autopair handlers to run *instead* of the default handler. + +Each element is a function taking three arguments (ACTION, PAIR +and POS-BEFORE), which are the three elements of the +`autopair-action' variable, which see. + +If non-nil, these functions are called *instead* of the single +function `autopair-default-handle-action', so use this variable +to specify special behaviour. To also run the default behaviour, +be sure to include `autopair-default-handle-action' in the +list, or call it from your handlers.") +(make-variable-buffer-local 'autopair-handle-action-fns) + +(defvar autopair-handle-wrap-action-fns '() + "Autopair wrap handlers to run *instead* of the default handler. + +Each element is a function taking four arguments (ACTION, PAIR, +POS-BEFORE and REGION-BEFORE), which are the three elements of the +`autopair-wrap-action' variable, which see. + +If non-nil, these functions are called *instead* of the single +function `autopair-default-handle-wrap-action', so use this +variable to specify special behaviour. To also run the default +behaviour, be sure to include `autopair-default-handle-wrap-action' in +the list, or call it in your handlers.") +(make-variable-buffer-local 'autopair-handle-wrap-action-fns) + +;; minor mode and global mode +;; +(define-globalized-minor-mode autopair-global-mode autopair-mode autopair-on) + +(defun autopair-on () (unless (or buffer-read-only autopair-dont-activate) (autopair-mode 1))) + +(define-minor-mode autopair-mode + "Automagically pair braces and quotes like in TextMate." + nil " pair" nil + (cond (autopair-mode + ;; Setup the dynamic emulation keymap + ;; + (let ((map (make-sparse-keymap))) + (define-key map [remap delete-backward-char] 'autopair-backspace) + (define-key map [remap backward-delete-char-untabify] 'autopair-backspace) + (define-key map (kbd "") 'autopair-backspace) + (define-key map [backspace] 'autopair-backspace) + (define-key map (kbd "DEL") 'autopair-backspace) + (define-key map (kbd "RET") 'autopair-newline) + (dotimes (char 256) ;; only searches the first 256 chars, + ;; TODO: is this enough/toomuch/stupid? + (unless (member char + (getf autopair-dont-pair :never)) + (let* ((syntax-entry (aref (syntax-table) char)) + (class (and syntax-entry + (syntax-class syntax-entry))) + (pair (and syntax-entry + (cdr syntax-entry)))) + (cond ((eq class (car (string-to-syntax "("))) + ;; syntax classes "opening parens" and "close parens" + (define-key map (string char) 'autopair-insert-opening) + (define-key map (string pair) 'autopair-skip-close-maybe)) + ((eq class (car (string-to-syntax "\""))) + ;; syntax class "string quote + (define-key map (string char) 'autopair-insert-or-skip-quote)) + ((eq class (car (string-to-syntax "$"))) + ;; syntax class "paired-delimiter" + ;; + ;; Apropos this class, see Issues 18, 25 and + ;; elisp info node "35.2.1 Table of Syntax + ;; Classes". The fact that it supresses + ;; syntatic properties in the delimited region + ;; dictates that deciding to autopair/autoskip + ;; can't really be as clean as the string + ;; delimiter. + ;; + ;; Apparently, only `TeX-mode' uses this, so + ;; the best is to bind this to + ;; `autopair-insert-or-skip-paired-delimiter' + ;; which defers any decision making to + ;; mode-specific post-command handler + ;; functions. + ;; + (define-key map (string char) 'autopair-insert-or-skip-paired-delimiter)))))) + ;; read `autopair-extra-pairs' + (dolist (pairs-list (remove-if-not #'listp autopair-extra-pairs)) + (dolist (pair pairs-list) + (define-key map (string (car pair)) 'autopair-extra-insert-opening) + (define-key map (string (cdr pair)) 'autopair-extra-skip-close-maybe))) + + (set (make-local-variable 'autopair-emulation-alist) (list (cons t map)))) + + (setq autopair-action nil) + (setq autopair-wrap-action nil) + (add-hook 'emulation-mode-map-alists 'autopair-emulation-alist 'append) + (add-hook 'post-command-hook 'autopair-post-command-handler 'append 'local)) + (t + (setq autopair-emulation-alist nil) + (remove-hook 'emulation-mode-map-alists 'autopair-emulation-alist) + (remove-hook 'post-command-hook 'autopair-post-command-handler 'local)))) + +;; helper functions +;; +(defun autopair-syntax-ppss () + "Calculate syntax info relevant to autopair. + +A list of four elements is returned: + +- SYNTAX-INFO is either the result `syntax-ppss' or the result of + calling `parse-partial-sexp' with the appropriate + bounds (previously calculated with `syntax-ppss'. + +- WHERE-SYM can be one of the symbols :string, :comment or :code. + +- QUICK-SYNTAX-INFO is always the result returned by `syntax-ppss'. + +- BOUNDS are the boudaries of the current string or comment if + we're currently inside one." + (let* ((quick-syntax-info (syntax-ppss)) + (string-or-comment-start (nth 8 quick-syntax-info))) + (cond (;; inside a string, recalculate + (nth 3 quick-syntax-info) + (list (parse-partial-sexp (1+ string-or-comment-start) (point)) + :string + quick-syntax-info + (cons string-or-comment-start + (condition-case nil + (scan-sexps string-or-comment-start 1) + (error nil))))) + ((nth 4 quick-syntax-info) + (list (parse-partial-sexp (1+ (nth 8 quick-syntax-info)) (point)) + :comment + quick-syntax-info)) + (t + (list quick-syntax-info + :code + quick-syntax-info))))) + +(defun autopair-find-pair (delim) + (when (and delim + (integerp delim)) + (let ((syntax-entry (aref (syntax-table) delim))) + (cond ((eq (syntax-class syntax-entry) (car (string-to-syntax "("))) + (cdr syntax-entry)) + ((or (eq (syntax-class syntax-entry) (car (string-to-syntax "\""))) + (eq (syntax-class syntax-entry) (car (string-to-syntax "$")))) + delim) + ((eq (syntax-class syntax-entry) (car (string-to-syntax ")"))) + (cdr syntax-entry)) + (autopair-extra-pairs + (some #'(lambda (pair-list) + (some #'(lambda (pair) + (cond ((eq (cdr pair) delim) (car pair)) + ((eq (car pair) delim) (cdr pair)))) + pair-list)) + (remove-if-not #'listp autopair-extra-pairs))))))) + +(defun autopair-calculate-wrap-action () + (when (region-active-p) + (save-excursion + (let* ((region-before (cons (region-beginning) + (region-end))) + (point-before (point)) + (start-syntax (syntax-ppss (car region-before))) + (end-syntax (syntax-ppss (cdr region-before)))) + (when (and (eq (nth 0 start-syntax) (nth 0 end-syntax)) + (eq (nth 3 start-syntax) (nth 3 end-syntax))) + (list 'wrap (or (second autopair-action) + (autopair-find-pair last-input-event)) + point-before + region-before)))))) + +(defun autopair-fallback (&optional fallback-keys) + (let* ((autopair-emulation-alist nil) + (beyond-cua (let ((cua--keymap-alist nil)) + (or (key-binding (this-single-command-keys)) + (key-binding fallback-keys)))) + (beyond-autopair (or (key-binding (this-single-command-keys)) + (key-binding fallback-keys)))) + (when autopair-autowrap + (setq autopair-wrap-action (autopair-calculate-wrap-action))) + + (setq this-original-command beyond-cua) + ;; defer to "paredit-mode" if that is installed and running + (when (and (featurep 'paredit) + (string-match "paredit" (symbol-name beyond-cua))) + (setq autopair-action nil)) + (let ((cua-delete-selection (not autopair-autowrap)) + (blink-matching-paren (not autopair-action))) + (call-interactively beyond-autopair)))) + +(defvar autopair-autowrap nil + "If non-nil autopair attempts to wrap the selected region. + +This is also done in an optimistic \"try-to-balance\" fashion.") + +(defvar autopair-skip-whitespace nil + "If non-nil also skip over whitespace when skipping closing delimiters. + +This will be most useful in lisp-like languages where you want +lots of )))))....") + +(defvar autopair-blink (if (boundp 'blink-matching-paren) + blink-matching-paren + t) + "If non-nil autopair blinks matching delimiters.") + +(defvar autopair-blink-delay 0.1 + "Autopair's blink-the-delimiter delay.") + +(defun autopair-document-bindings (&optional fallback-keys) + (concat + "Works by scheduling possible autopair behaviour, then calls +original command as if autopair didn't exist" + (when (eq this-command 'describe-key) + (let* ((autopair-emulation-alist nil) + (command (or (key-binding (this-single-command-keys)) + (key-binding fallback-keys)))) + (when command + (format ", which in this case is `%s'" command)))) + ".")) + +(defun autopair-escaped-p (syntax-info) + (nth 5 syntax-info)) + +(defun autopair-exception-p (where-sym exception-where-sym blacklist &optional fn) + (and (or (eq exception-where-sym :everywhere) + (eq exception-where-sym where-sym)) + (member last-input-event + (if fn + (mapcar fn (getf blacklist exception-where-sym)) + (getf blacklist exception-where-sym))))) + +(defun autopair-up-list (syntax-info &optional closing) + "Try to uplist as much as possible, moving point. + +Return nil if something prevented uplisting. + +Otherwise return a cons of char positions of the starting +delimiter and end delimiters of the last list we just came out +of. If we aren't inside any lists return a cons of current point. + +If inside nested lists of mixed parethesis types, finding a +matching parenthesis of a mixed-type is considered OK (non-nil is +returned) and uplisting stops there." + (condition-case nil + (let ((howmany (car syntax-info)) + (retval (cons (point) + (point)))) + (while (and (> howmany 0) + (condition-case err + (progn + (scan-sexps (point) (- (point-max))) + (error err)) + (error (let ((opening (and closing + (autopair-find-pair closing)))) + (setq retval (cons (fourth err) + (point))) + (or (not opening) + (eq opening (char-after (fourth err)))))))) + (goto-char (scan-lists (point) 1 1)) + (decf howmany)) + retval) + (error nil))) + +;; interactive commands and their associated predicates +;; +(defun autopair-insert-or-skip-quote () + (interactive) + (let* ((syntax-triplet (autopair-syntax-ppss)) + (syntax-info (first syntax-triplet)) + (where-sym (second syntax-triplet)) + (orig-info (third syntax-triplet)) + ;; inside-string may the quote character itself or t if this + ;; is a "generically terminated string" + (inside-string (and (eq where-sym :string) + (fourth orig-info))) + (escaped-p (autopair-escaped-p syntax-info)) + + ) + (cond (;; decides whether to skip the quote... + ;; + (and (not escaped-p) + (eq last-input-event (char-after (point))) + (or + ;; ... if we're already inside a string and the + ;; string starts with the character just inserted, + ;; or it's a generically terminated string + (and inside-string + (or (eq inside-string t) + (eq last-input-event inside-string))) + ;; ... if we're in a comment and ending a string + ;; (the inside-string criteria does not work + ;; here...) + (and (eq where-sym :comment) + (condition-case nil + (eq last-input-event (char-after (scan-sexps (1+ (point)) -1))) + (error nil))))) + (setq autopair-action (list 'skip-quote last-input-event (point)))) + (;; decides whether to pair, i.e do *not* pair the quote if... + ;; + (not + (or + escaped-p + ;; ... inside a generic string + (eq inside-string t) + ;; ... inside an unterminated string started by this char + (autopair-in-unterminated-string-p syntax-triplet) + ;; ... uplisting forward causes an error which leaves us + ;; inside an unterminated string started by this char + (condition-case err + (progn (save-excursion (up-list)) nil) + (error + (autopair-in-unterminated-string-p (save-excursion + (goto-char (fourth err)) + (autopair-syntax-ppss))))) + (autopair-in-unterminated-string-p (save-excursion + (goto-char (point-max)) + (autopair-syntax-ppss))) + ;; ... comment-disable or string-disable are true here. + ;; The latter is only useful if we're in a string + ;; terminated by a character other than + ;; `last-input-event'. + (some #'(lambda (sym) + (autopair-exception-p where-sym sym autopair-dont-pair)) + '(:comment :string)))) + (setq autopair-action (list 'insert-quote last-input-event (point))))) + (autopair-fallback))) + + (put 'autopair-insert-or-skip-quote 'function-documentation + '(concat "Insert or possibly skip over a quoting character.\n\n" + (autopair-document-bindings))) + +(defun autopair-in-unterminated-string-p (autopair-triplet) + (and (eq last-input-event (fourth (third autopair-triplet))) + (condition-case nil (progn (scan-sexps (ninth (third autopair-triplet)) 1) nil) (error t)))) + + +(defun autopair-insert-opening () + (interactive) + (when (autopair-pair-p) + (setq autopair-action (list 'opening (autopair-find-pair last-input-event) (point)))) + (autopair-fallback)) +(put 'autopair-insert-opening 'function-documentation + '(concat "Insert opening delimiter and possibly automatically close it.\n\n" + (autopair-document-bindings))) + +(defun autopair-skip-close-maybe () + (interactive) + (when (autopair-skip-p) + (setq autopair-action (list 'closing (autopair-find-pair last-input-event) (point)))) + (autopair-fallback)) +(put 'autopair-skip-close-maybe 'function-documentation + '(concat "Insert or possibly skip over a closing delimiter.\n\n" + (autopair-document-bindings))) + +(defun autopair-backspace () + (interactive) + (when (char-before) + (setq autopair-action (list 'backspace (autopair-find-pair (char-before)) (point)))) + (autopair-fallback (kbd "DEL"))) +(put 'autopair-backspace 'function-documentation + '(concat "Possibly delete a pair of paired delimiters.\n\n" + (autopair-document-bindings (kbd "DEL")))) + +(defun autopair-newline () + (interactive) + (let ((pair (autopair-find-pair (char-before)))) + (when (eq (char-after) pair) + (setq autopair-action (list 'newline pair (point)))) + (autopair-fallback (kbd "RET")))) +(put 'autopair-newline 'function-documentation + '(concat "Possibly insert two newlines and place point after the first, indented.\n\n" + (autopair-document-bindings (kbd "RET")))) + +(defun autopair-skip-p () + (interactive) + (let* ((syntax-triplet (autopair-syntax-ppss)) + (syntax-info (first syntax-triplet)) + (orig-point (point))) + (cond ((eq autopair-skip-criteria 'help-balance) + (save-excursion + (let ((pos-pair (autopair-up-list syntax-info last-input-event))) + ;; if `autopair-up-list' returned something valid, we + ;; probably want to skip but only if on of the following is true. + ;; + ;; 1. it returned a cons of equal values (we're not inside any list + ;; + ;; 2. up-listing stopped at a list that contains our original point + ;; + ;; 3. up-listing stopped at a list that does not + ;; contain out original point but its starting + ;; delimiter matches the one we expect. + (and pos-pair + (or (eq (car pos-pair) (cdr pos-pair)) + (< orig-point (cdr pos-pair)) + (eq (char-after (car pos-pair)) + (autopair-find-pair last-input-event))))))) + ((eq autopair-skip-criteria 'need-opening) + (save-excursion + (condition-case err + (progn + (backward-list) + t) + (error nil)))) + (t + t)))) + +(defun autopair-pair-p () + (let* ((syntax-triplet (autopair-syntax-ppss)) + (syntax-info (first syntax-triplet)) + (where-sym (second syntax-triplet)) + (orig-point (point))) + (and (not (some #'(lambda (sym) + (autopair-exception-p where-sym sym autopair-dont-pair)) + '(:string :comment :code :everywhere))) + (cond ((eq autopair-pair-criteria 'help-balance) + (and (not (autopair-escaped-p syntax-info)) + (save-excursion + (let ((pos-pair (autopair-up-list syntax-info)) + (prev-point (point-max)) + (expected-closing (autopair-find-pair last-input-event))) + (condition-case err + (progn + (while (not (eq prev-point (point))) + (setq prev-point (point)) + (forward-sexp)) + t) + (error + ;; if `forward-sexp' (called byp + ;; `autopair-forward') returned an error. + ;; typically we don't want to autopair, + ;; unless one of the following occurs: + ;; + (cond (;; 1. The error is *not* of type "containing + ;; expression ends prematurely", which means + ;; we're in the "too-many-openings" situation + ;; and thus want to autopair. + (not (string-match "prematurely" (second err))) + t) + (;; 2. We stopped at a closing parenthesis. Do + ;; autopair if we're in a mixed parens situation, + ;; i.e. the last list jumped over was started by + ;; the paren we're trying to match + ;; (`last-input-event') and ended by a different + ;; parens, or the closing paren we stopped at is + ;; also different from the expected. The second + ;; `scan-lists' places point at the closing of the + ;; last list we forwarded over. + ;; + (condition-case err + (prog1 + (eq (char-after (scan-lists (point) -1 0)) + last-input-event) + (goto-char (scan-lists (point) -1 -1))) + (error t)) + + (or + ;; mixed () ] for input (, yes autopair + (not (eq expected-closing (char-after (third err)))) + ;; mixed (] ) for input (, yes autopair + (not (eq expected-closing (char-after (point)))) + ;; ()) for input (, not mixed + ;; hence no autopair + )) + (t + nil)) + ;; (eq (fourth err) (point-max)) + )))))) + ((eq autopair-pair-criteria 'always) + t) + (t + (not (autopair-escaped-p))))))) + +;; post-command-hook stuff +;; +(defun autopair-post-command-handler () + "Performs pairing and wrapping based on `autopair-action' and +`autopair-wrap-action'. " + (when (and autopair-wrap-action + (notany #'null autopair-wrap-action)) + + (if autopair-handle-wrap-action-fns + (condition-case err + (mapc #'(lambda (fn) + (apply fn autopair-wrap-action)) + autopair-handle-wrap-action-fns) + (error (progn + (message "[autopair] error running custom `autopair-handle-wrap-action-fns', switching autopair off") + (autopair-mode -1)))) + (apply #'autopair-default-handle-wrap-action autopair-wrap-action)) + (setq autopair-wrap-action nil)) + + (when (and autopair-action + (notany #'null autopair-action)) + (if autopair-handle-action-fns + (condition-case err + (mapc #'(lambda (fn) + (funcall fn (first autopair-action) (second autopair-action) (third autopair-action))) + autopair-handle-action-fns) + (error (progn + (message "[autopair] error running custom `autopair-handle-action-fns', switching autopair off") + (autopair-mode -1)))) + (apply #'autopair-default-handle-action autopair-action)) + (setq autopair-action nil))) + +(defun autopair-blink-matching-open () + (let ((blink-matching-paren autopair-blink) + (show-paren-mode nil) + (blink-matching-delay autopair-blink-delay)) + (blink-matching-open))) + +(defun autopair-blink (&optional pos) + (when autopair-blink + (if pos + (save-excursion + (goto-char pos) + (sit-for autopair-blink-delay)) + (sit-for autopair-blink-delay)))) + +(defun autopair-default-handle-action (action pair pos-before) + ;;(message "action is %s" action) + (cond (;; automatically insert closing delimiter + (and (eq 'opening action) + (not (eq pair (char-before)))) + (insert pair) + (autopair-blink) + (backward-char 1)) + (;; automatically insert closing quote delimiter + (eq 'insert-quote action) + (insert pair) + (autopair-blink) + (backward-char 1)) + (;; automatically skip oper closer quote delimiter + (and (eq 'skip-quote action) + (eq pair (char-after (point)))) + (delete-char 1) + (autopair-blink-matching-open)) + (;; skip over newly-inserted-but-existing closing delimiter + ;; (normal case) + (eq 'closing action) + (let ((skipped 0)) + (when autopair-skip-whitespace + (setq skipped (save-excursion (skip-chars-forward "\s\n\t")))) + (when (eq last-input-event (char-after (+ (point) skipped))) + (unless (zerop skipped) (autopair-blink (+ (point) skipped))) + (delete-char (1+ skipped)) + (autopair-blink-matching-open)))) + (;; autodelete closing delimiter + (and (eq 'backspace action) + (eq pair (char-after (point)))) + (delete-char 1)) + (;; opens an extra line after point, then indents + (and (eq 'newline action) + (eq pair (char-after (point)))) + (save-excursion + (newline-and-indent)) + (indent-according-to-mode) + (when (or (and (boundp 'global-hl-line-mode) + global-hl-line-mode) + (and (boundp 'hl-line-mode) + hl-line-mode)) + (hl-line-unhighlight) (hl-line-highlight))))) + +(defun autopair-default-handle-wrap-action (action pair pos-before region-before) + "Default handler for the wrapping action in `autopair-wrap'" + (when (eq 'wrap action) + (let ((reverse-selected (= (car region-before) pos-before))) + (cond + ((eq 'opening (first autopair-action)) + ;; (message "wrap-opening!") + (cond (reverse-selected + (goto-char (1+ (cdr region-before))) + (insert pair) + (autopair-blink) + (goto-char (1+ (car region-before)))) + (t + (delete-backward-char 1) + (insert pair) + (goto-char (car region-before)) + (insert last-input-event))) + (setq autopair-action nil) ) + (;; wraps + (eq 'closing (first autopair-action)) + ;; (message "wrap-closing!") + (cond (reverse-selected + (delete-backward-char 1) + (insert pair) + (goto-char (1+ (cdr region-before))) + (insert last-input-event)) + (t + (goto-char (car region-before)) + (insert pair) + (autopair-blink) + (goto-char (+ 2 (cdr region-before))))) + (setq autopair-action nil)) + ((eq 'insert-quote (first autopair-action)) + (cond (reverse-selected + (goto-char (1+ (cdr region-before))) + (insert pair) + (autopair-blink)) + (t + (goto-char (car region-before)) + (insert last-input-event) + (autopair-blink))) + (setq autopair-action nil)) + (reverse-selected + (delete-backward-char 1) + (goto-char (cdr region-before)) + (insert last-input-event)))))) + + +;; example python triple quote helper +;; +(defun autopair-python-triple-quote-action (action pair pos-before) + (cond ((and (eq 'insert-quote action) + (>= (point) 3) + (string= (buffer-substring (- (point) 3) + (point)) + (make-string 3 pair))) + (save-excursion (insert (make-string 2 pair)))) + ((and (eq 'backspace action) + (>= (point) 2) + (<= (point) (- (point-max) 2)) + (string= (buffer-substring (- (point) 2) + (+ (point) 2)) + (make-string 4 pair))) + (delete-region (- (point) 2) + (+ (point) 2))) + ((and (eq 'skip-quote action) + (<= (point) (- (point-max) 2)) + (string= (buffer-substring (point) + (+ (point) 2)) + (make-string 2 pair))) + (forward-char 2)) + (t + t))) + +;; example latex paired-delimiter helper +;; +(defun autopair-latex-mode-paired-delimiter-action (action pair pos-before) + "Pair or skip latex's \"paired delimiter\" syntax in math mode." + (when (eq action 'paired-delimiter) + (when (eq (char-before) pair) + (if (and (eq (get-text-property pos-before 'face) 'tex-math) + (eq (char-after) pair)) + (cond ((and (eq (char-after) pair) + (eq (char-after (1+ (point))) pair)) + ;; double skip + (delete-char 1) + (forward-char)) + ((eq (char-before pos-before) pair) + ;; doube insert + (insert pair) + (backward-char)) + (t + ;; simple skip + (delete-char 1))) + (insert pair) + (backward-char))))) + +;; Commands and predicates for the autopair-extra* feature +;; + +(defun autopair-extra-insert-opening () + (interactive) + (when (autopair-extra-pair-p) + (setq autopair-action (list 'opening (autopair-find-pair last-input-event) (point)))) + (autopair-fallback)) +(put 'autopair-extra-insert-opening 'function-documentation + '(concat "Insert (an extra) opening delimiter and possibly automatically close it.\n\n" + (autopair-document-bindings))) + +(defun autopair-extra-skip-close-maybe () + (interactive) + (when (autopair-extra-skip-p) + (setq autopair-action (list 'closing last-input-event (point)))) + (autopair-fallback)) +(put 'autopair-extra-skip-close-maybe 'function-documentation + '(concat "Insert or possibly skip over a (and extra) closing delimiter.\n\n" + (autopair-document-bindings))) + +(defun autopair-extra-pair-p () + (let* ((syntax-triplet (autopair-syntax-ppss)) + (syntax-info (first syntax-triplet)) + (where-sym (second syntax-triplet))) + (some #'(lambda (sym) + (autopair-exception-p where-sym sym autopair-extra-pairs #'car)) + '(:everywhere :comment :string :code)))) + +(defun autopair-extra-skip-p () + (let* ((syntax-triplet (autopair-syntax-ppss)) + (syntax-info (first syntax-triplet)) + (where-sym (second syntax-triplet)) + (orig-point (point))) + (and (eq (char-after (point)) last-input-event) + (some #'(lambda (sym) + (autopair-exception-p where-sym sym autopair-extra-pairs #'cdr)) + '(:comment :string :code :everywhere)) + (save-excursion + (condition-case err + (backward-sexp (point-max)) + (error + (goto-char (third err)))) + (search-forward (make-string 1 (autopair-find-pair last-input-event)) + orig-point + 'noerror))))) + +;; Commands and tex-mode specific handler functions for the "paired +;; delimiter" syntax class. +;; +(defun autopair-insert-or-skip-paired-delimiter () + " insert or skip a character paired delimiter" + (interactive) + (setq autopair-action (list 'paired-delimiter last-input-event (point))) + (autopair-fallback)) + +(put 'autopair-insert-or-skip-paired-delimiter 'function-documentation + '(concat "Insert or possibly skip over a character with a syntax-class of \"paired delimiter\"." + (autopair-document-bindings))) + + + +;; monkey-patching: Compatibility with delete-selection-mode and cua-mode +;; +;; Ideally one would be able to use functions as the value of the +;; 'delete-selection properties of the autopair commands. The function +;; would return non-nil when no wrapping should/could be performed. +;; +;; Until then use some `defadvice' i.e. monkey-patching +;; +(put 'autopair-insert-opening 'delete-selection t) +(put 'autopair-skip-close-maybe 'delete-selection t) +(put 'autopair-insert-or-skip-quote 'delete-selection t) +(put 'autopair-extra-insert-opening 'delete-selection t) +(put 'autopair-extra-skip-close-maybe 'delete-selection t) +(put 'autopair-backspace 'delete-selection 'supersede) +(put 'autopair-newline 'delete-selection t) + +(defun autopair-should-autowrap () + (let ((name (symbol-name this-command))) + (and autopair-mode + (not (eq this-command 'autopair-backspace)) + (string-match "^autopair" (symbol-name this-command)) + (autopair-calculate-wrap-action)))) + +(defadvice cua--pre-command-handler-1 (around autopair-override activate) + "Don't actually do anything if autopair is about to autowrap. " + (unless (autopair-should-autowrap) ad-do-it)) + +(defadvice delete-selection-pre-hook (around autopair-override activate) + "Don't actually do anything if autopair is about to autowrap. " + (unless (autopair-should-autowrap) ad-do-it)) + + +(provide 'autopair) +;;; autopair.el ends here +;; diff --git a/.emacs.d/include.el b/.emacs.d/include.el index 35c273a..4043f3e 100644 --- a/.emacs.d/include.el +++ b/.emacs.d/include.el @@ -13,6 +13,6 @@ "~/.emacs.d/batch-mode.el" "A Major mode for editing Batch files" t) (autoload 'rainbow-mode "~/.emacs.d/rainbow-mode.el" "A Minor mode for showing colors inline" t) - +(load-file "~/.emacs.d/autopair.el") (load-file "~/.emacs.d/auto-complete-config.el") (require 'auto-complete-config) \ No newline at end of file diff --git a/.emacs.d/slash_theme.el b/.emacs.d/slash_theme.el index f0150f9..9f3147f 100644 --- a/.emacs.d/slash_theme.el +++ b/.emacs.d/slash_theme.el @@ -12,24 +12,24 @@ (cursor-color . "#FFFFFF") (foreground-color . "#FFFFFF") (mouse-color . "#000000")) - (org-level-1 ((t (:foreground "#5BFD5B" :weight normal)))) - (org-level-2 ((t (:foreground "#379A37" :weight normal)))) - (org-level-3 ((t (:foreground "#757575" :weight normal)))) - (org-level-4 ((t (:foreground "#778899" :weight normal)))) - (org-level-5 ((t (:foreground "#9898FF" :weight normal)))) - (org-level-6 ((t (:foreground "#0000B0" :weight normal)))) - (org-level-7 ((t (:foreground "#740091" :weight normal)))) - (org-level-8 ((t (:foreground "#B275C1" :weight normal)))) - (fringe ((t (:background "#000000")))) - (mode-line ((t (:foreground "#B3B3B3" :background "#43527A")))) - (region ((t (:background "#3D3D3D")))) - (minibuffer-prompt ((t (:foreground "#72F3FF" :bold t)))) - (font-lock-builtin-face ((t (:foreground "#C436C4")))) - (font-lock-comment-face ((t (:foreground "#427240" :bold t)))) + (org-level-1 ((t (:foreground "#5BFD5B" :weight normal)))) + (org-level-2 ((t (:foreground "#379A37" :weight normal)))) + (org-level-3 ((t (:foreground "#757575" :weight normal)))) + (org-level-4 ((t (:foreground "#778899" :weight normal)))) + (org-level-5 ((t (:foreground "#9898FF" :weight normal)))) + (org-level-6 ((t (:foreground "#0000B0" :weight normal)))) + (org-level-7 ((t (:foreground "#740091" :weight normal)))) + (org-level-8 ((t (:foreground "#B275C1" :weight normal)))) + (fringe ((t (:background "#000000")))) + (mode-line ((t (:foreground "#B3B3B3" :background "#43527A" :background "#000000" :box nil)))) + (region ((t (:background "#3D3D3D")))) + (minibuffer-prompt ((t (:foreground "#72F3FF" :bold t)))) + (font-lock-builtin-face ((t (:foreground "#C436C4")))) + (font-lock-comment-face ((t (:foreground "#00A000" :background "#004000" :bold t :box (:line-width 1 :color "#006000" :style nil))))) (font-lock-function-name-face ((t (:foreground "#0FFF28")))) - (font-lock-keyword-face ((t (:foreground "#6B84FF")))) - (font-lock-string-face ((t (:foreground "#E00900")))) - (font-lock-type-face ((t (:foreground "#8522DD")))) + (font-lock-keyword-face ((t (:foreground "#4E61BB" :bold t)))) + (font-lock-string-face ((t (:foreground "#E00900")))) + (font-lock-type-face ((t (:foreground "#8522DD")))) (font-lock-variable-name-face ((t (:foreground "#18EFF2")))) - (font-lock-warning-face ((t (:foreground "#FF0000" :bold t))))))) + (font-lock-warning-face ((t (:foreground "#FF0000" :bold t))))))) (provide 'color-theme-weirdness) \ No newline at end of file From a311b2fe95c8e6bad1cfbdf6e1d76896c01038bc Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 13 Jul 2010 21:58:17 +0200 Subject: [PATCH 08/24] modified conkerorrc --- .conkerorrc | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/.conkerorrc b/.conkerorrc index e9fea2a..6e06630 100644 --- a/.conkerorrc +++ b/.conkerorrc @@ -11,11 +11,24 @@ require("clicks-in-new-buffer.js"); }*/ function test(window) { - var test = window.tab2-bar; - window.buffers.container.removeChild(test); + //var test = window.getElementsByAttribute("id", "tab2-bar"); + //if (test.length > 0) + // window.removeChild(test); + //else + // window.minibuffer.message("no luck"); + var after = window.document.getElementById("minibuffer"); + var testtab = window.document.getElementById("tab2-bar"); + + window["minibuffer"].message("I'm different!"); + + window.tab_bar.destroy(); + delete window.tab_bar; + + window.tab_bar = testtab; + after.parentNode.insertBefore(testtab, after); } -//add_hook("window_initialize_hook", test); +add_hook("window_initialize_late_hook", test); // VARIABLES // Make middle mouse button open new tab in background @@ -23,12 +36,13 @@ clicks_in_new_buffer_target = OPEN_NEW_BUFFER_BACKGROUND; // WEBJUMPS define_webjump("delicious", - "http://delicious.com/search?p=linux&lc=0&context=userposts%7Cslashed%7C", + "http://delicious.com/search?p=linux&lc=0&context=userposts%7Cslashed%7C&replace=no", $alternative="http://delicious.com/slashed"); define_webjump("gmail", "https://mail.google.com/mail/#search/%s"); define_webjump("greader", - "http://www.google.com/reader/view/#search/%s/"); + "http://www.google.com/reader/view/#search/%s/", + $alternative="http://reader.google.com"); define_webjump("github", "http://github.com/search?q=%s", $alternative="http://github.com/ryuslash/"); @@ -36,6 +50,8 @@ define_webjump("archwiki", "http://wiki.archlinux.org/index.php?search=%s"); define_webjump("fedorawiki", "https://fedoraproject.org/wiki/search=%s"); +define_webjump("metal-archives", + "http://www.metal-archives.com/search.php?string=%s&type=band"); // FUNCTIONS interactive("delicious-post", From 8445660213425220f5089090831f8a292eb45c42 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 13 Jul 2010 22:02:52 +0200 Subject: [PATCH 09/24] edited conkerorrc --- .conkerorrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.conkerorrc b/.conkerorrc index 36843b9..b9bd714 100644 --- a/.conkerorrc +++ b/.conkerorrc @@ -8,7 +8,7 @@ require("clicks-in-new-buffer.js"); sheet.append("stylesheets"); sheet.append("tabs.css"); register_user_stylesheet(make_uri(sheet)); -}*/ +} function test(window) { //var test = window.getElementsByAttribute("id", "tab2-bar"); @@ -28,7 +28,7 @@ function test(window) after.parentNode.insertBefore(testtab, after); } -add_hook("window_initialize_late_hook", test); +add_hook("window_initialize_late_hook", test);*/ // VARIABLES // Make middle mouse button open new tab in background From 70d746ab86affd5cc1754e7350212d46500de9b5 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 13 Jul 2010 22:20:44 +0200 Subject: [PATCH 10/24] Added font-lock-comment-delimiter-face to theme --- .emacs.d/slash_theme.el | 43 +++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/.emacs.d/slash_theme.el b/.emacs.d/slash_theme.el index 9f3147f..777184e 100644 --- a/.emacs.d/slash_theme.el +++ b/.emacs.d/slash_theme.el @@ -12,24 +12,25 @@ (cursor-color . "#FFFFFF") (foreground-color . "#FFFFFF") (mouse-color . "#000000")) - (org-level-1 ((t (:foreground "#5BFD5B" :weight normal)))) - (org-level-2 ((t (:foreground "#379A37" :weight normal)))) - (org-level-3 ((t (:foreground "#757575" :weight normal)))) - (org-level-4 ((t (:foreground "#778899" :weight normal)))) - (org-level-5 ((t (:foreground "#9898FF" :weight normal)))) - (org-level-6 ((t (:foreground "#0000B0" :weight normal)))) - (org-level-7 ((t (:foreground "#740091" :weight normal)))) - (org-level-8 ((t (:foreground "#B275C1" :weight normal)))) - (fringe ((t (:background "#000000")))) - (mode-line ((t (:foreground "#B3B3B3" :background "#43527A" :background "#000000" :box nil)))) - (region ((t (:background "#3D3D3D")))) - (minibuffer-prompt ((t (:foreground "#72F3FF" :bold t)))) - (font-lock-builtin-face ((t (:foreground "#C436C4")))) - (font-lock-comment-face ((t (:foreground "#00A000" :background "#004000" :bold t :box (:line-width 1 :color "#006000" :style nil))))) - (font-lock-function-name-face ((t (:foreground "#0FFF28")))) - (font-lock-keyword-face ((t (:foreground "#4E61BB" :bold t)))) - (font-lock-string-face ((t (:foreground "#E00900")))) - (font-lock-type-face ((t (:foreground "#8522DD")))) - (font-lock-variable-name-face ((t (:foreground "#18EFF2")))) - (font-lock-warning-face ((t (:foreground "#FF0000" :bold t))))))) -(provide 'color-theme-weirdness) \ No newline at end of file + (org-level-1 ((t (:foreground "#5BFD5B" :weight normal)))) + (org-level-2 ((t (:foreground "#379A37" :weight normal)))) + (org-level-3 ((t (:foreground "#757575" :weight normal)))) + (org-level-4 ((t (:foreground "#778899" :weight normal)))) + (org-level-5 ((t (:foreground "#9898FF" :weight normal)))) + (org-level-6 ((t (:foreground "#0000B0" :weight normal)))) + (org-level-7 ((t (:foreground "#740091" :weight normal)))) + (org-level-8 ((t (:foreground "#B275C1" :weight normal)))) + (fringe ((t (:background "#000000")))) + (mode-line ((t (:foreground "#B3B3B3" :background "#43527A" :background "#000000" :box nil)))) + (region ((t (:background "#3D3D3D")))) + (minibuffer-prompt ((t (:foreground "#72F3FF" :bold t)))) + (font-lock-builtin-face ((t (:foreground "#C436C4")))) + (font-lock-comment-face ((t (:foreground "#00AC00" :background "#004000" :bold t :box (:line-width 1 :color "#006000" :style nil))))) + (font-lock-comment-delimiter-face ((t (:inherit 'font-lock-comment-face)))) + (font-lock-function-name-face ((t (:foreground "#0FFF28")))) + (font-lock-keyword-face ((t (:foreground "#4E61BB" :bold t)))) + (font-lock-string-face ((t (:foreground "#E00900")))) + (font-lock-type-face ((t (:foreground "#8522DD")))) + (font-lock-variable-name-face ((t (:foreground "#18EFF2")))) + (font-lock-warning-face ((t (:foreground "#FF0000" :bold t))))))) +(provide 'color-theme-weirdness) From 9a029f7b7787318631a95c947078d7ee148925ee Mon Sep 17 00:00:00 2001 From: ryuslash Date: Wed, 14 Jul 2010 16:51:21 +0200 Subject: [PATCH 11/24] Modified theme --- .emacs.d/slash_theme.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.emacs.d/slash_theme.el b/.emacs.d/slash_theme.el index 777184e..c2f54b6 100644 --- a/.emacs.d/slash_theme.el +++ b/.emacs.d/slash_theme.el @@ -24,6 +24,8 @@ (mode-line ((t (:foreground "#B3B3B3" :background "#43527A" :background "#000000" :box nil)))) (region ((t (:background "#3D3D3D")))) (minibuffer-prompt ((t (:foreground "#72F3FF" :bold t)))) + (flymake-warnline ((t (:background "#000060")))) + (flymake-errline ((t (:background "#600000")))) (font-lock-builtin-face ((t (:foreground "#C436C4")))) (font-lock-comment-face ((t (:foreground "#00AC00" :background "#004000" :bold t :box (:line-width 1 :color "#006000" :style nil))))) (font-lock-comment-delimiter-face ((t (:inherit 'font-lock-comment-face)))) From 1cd072301b077e2b39175d778ee02bd9a8fc1a64 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Thu, 15 Jul 2010 20:49:39 +0200 Subject: [PATCH 12/24] Finally added my awesome config --- awesome/rc.lua | 1 + awesome/themes/default/background.png | Bin 0 -> 43786 bytes awesome/themes/default/layouts/dwindle.png | Bin 0 -> 967 bytes awesome/themes/default/layouts/dwindlew.png | Bin 0 -> 997 bytes awesome/themes/default/layouts/fairh.png | Bin 0 -> 194 bytes awesome/themes/default/layouts/fairhw.png | Bin 0 -> 194 bytes awesome/themes/default/layouts/fairv.png | Bin 0 -> 201 bytes awesome/themes/default/layouts/fairvw.png | Bin 0 -> 201 bytes awesome/themes/default/layouts/floating.png | Bin 0 -> 395 bytes awesome/themes/default/layouts/floatingw.png | Bin 0 -> 388 bytes awesome/themes/default/layouts/fullscreen.png | Bin 0 -> 202 bytes .../themes/default/layouts/fullscreenw.png | Bin 0 -> 202 bytes awesome/themes/default/layouts/magnifier.png | Bin 0 -> 209 bytes awesome/themes/default/layouts/magnifierw.png | Bin 0 -> 209 bytes awesome/themes/default/layouts/max.png | Bin 0 -> 321 bytes awesome/themes/default/layouts/maxw.png | Bin 0 -> 321 bytes awesome/themes/default/layouts/spiral.png | Bin 0 -> 1506 bytes awesome/themes/default/layouts/spiralw.png | Bin 0 -> 1527 bytes awesome/themes/default/layouts/tile.png | Bin 0 -> 174 bytes awesome/themes/default/layouts/tilebottom.png | Bin 0 -> 195 bytes .../themes/default/layouts/tilebottomw.png | Bin 0 -> 216 bytes awesome/themes/default/layouts/tileleft.png | Bin 0 -> 172 bytes awesome/themes/default/layouts/tileleftw.png | Bin 0 -> 170 bytes awesome/themes/default/layouts/tiletop.png | Bin 0 -> 195 bytes awesome/themes/default/layouts/tiletopw.png | Bin 0 -> 215 bytes awesome/themes/default/layouts/tilew.png | Bin 0 -> 168 bytes awesome/themes/default/submenu.png | Bin 0 -> 440 bytes awesome/themes/default/taglist/squarefw.png | Bin 0 -> 187 bytes awesome/themes/default/taglist/squarew.png | Bin 0 -> 193 bytes awesome/themes/default/tasklist/floating.png | Bin 0 -> 345 bytes awesome/themes/default/tasklist/floatingw.png | Bin 0 -> 334 bytes awesome/themes/default/theme.lua | 96 ++++++++++++++++++ .../themes/default/titlebar/close_focus.png | Bin 0 -> 666 bytes .../themes/default/titlebar/close_normal.png | Bin 0 -> 893 bytes .../titlebar/floating_focus_active.png | Bin 0 -> 598 bytes .../titlebar/floating_focus_inactive.png | Bin 0 -> 571 bytes .../titlebar/floating_normal_active.png | Bin 0 -> 799 bytes .../titlebar/floating_normal_inactive.png | Bin 0 -> 562 bytes .../titlebar/maximized_focus_active.png | Bin 0 -> 1013 bytes .../titlebar/maximized_focus_inactive.png | Bin 0 -> 793 bytes .../titlebar/maximized_normal_active.png | Bin 0 -> 1208 bytes .../titlebar/maximized_normal_inactive.png | Bin 0 -> 780 bytes .../default/titlebar/ontop_focus_active.png | Bin 0 -> 774 bytes .../default/titlebar/ontop_focus_inactive.png | Bin 0 -> 722 bytes .../default/titlebar/ontop_normal_active.png | Bin 0 -> 965 bytes .../titlebar/ontop_normal_inactive.png | Bin 0 -> 720 bytes .../default/titlebar/sticky_focus_active.png | Bin 0 -> 833 bytes .../titlebar/sticky_focus_inactive.png | Bin 0 -> 611 bytes .../default/titlebar/sticky_normal_active.png | Bin 0 -> 967 bytes .../titlebar/sticky_normal_inactive.png | Bin 0 -> 625 bytes install.sh | 16 ++- 51 files changed, 111 insertions(+), 2 deletions(-) create mode 120000 awesome/rc.lua create mode 100644 awesome/themes/default/background.png create mode 100644 awesome/themes/default/layouts/dwindle.png create mode 100644 awesome/themes/default/layouts/dwindlew.png create mode 100644 awesome/themes/default/layouts/fairh.png create mode 100644 awesome/themes/default/layouts/fairhw.png create mode 100644 awesome/themes/default/layouts/fairv.png create mode 100644 awesome/themes/default/layouts/fairvw.png create mode 100644 awesome/themes/default/layouts/floating.png create mode 100644 awesome/themes/default/layouts/floatingw.png create mode 100644 awesome/themes/default/layouts/fullscreen.png create mode 100644 awesome/themes/default/layouts/fullscreenw.png create mode 100644 awesome/themes/default/layouts/magnifier.png create mode 100644 awesome/themes/default/layouts/magnifierw.png create mode 100644 awesome/themes/default/layouts/max.png create mode 100644 awesome/themes/default/layouts/maxw.png create mode 100644 awesome/themes/default/layouts/spiral.png create mode 100644 awesome/themes/default/layouts/spiralw.png create mode 100644 awesome/themes/default/layouts/tile.png create mode 100644 awesome/themes/default/layouts/tilebottom.png create mode 100644 awesome/themes/default/layouts/tilebottomw.png create mode 100644 awesome/themes/default/layouts/tileleft.png create mode 100644 awesome/themes/default/layouts/tileleftw.png create mode 100644 awesome/themes/default/layouts/tiletop.png create mode 100644 awesome/themes/default/layouts/tiletopw.png create mode 100644 awesome/themes/default/layouts/tilew.png create mode 100644 awesome/themes/default/submenu.png create mode 100644 awesome/themes/default/taglist/squarefw.png create mode 100644 awesome/themes/default/taglist/squarew.png create mode 100644 awesome/themes/default/tasklist/floating.png create mode 100644 awesome/themes/default/tasklist/floatingw.png create mode 100644 awesome/themes/default/theme.lua create mode 100644 awesome/themes/default/titlebar/close_focus.png create mode 100644 awesome/themes/default/titlebar/close_normal.png create mode 100644 awesome/themes/default/titlebar/floating_focus_active.png create mode 100644 awesome/themes/default/titlebar/floating_focus_inactive.png create mode 100644 awesome/themes/default/titlebar/floating_normal_active.png create mode 100644 awesome/themes/default/titlebar/floating_normal_inactive.png create mode 100644 awesome/themes/default/titlebar/maximized_focus_active.png create mode 100644 awesome/themes/default/titlebar/maximized_focus_inactive.png create mode 100644 awesome/themes/default/titlebar/maximized_normal_active.png create mode 100644 awesome/themes/default/titlebar/maximized_normal_inactive.png create mode 100644 awesome/themes/default/titlebar/ontop_focus_active.png create mode 100644 awesome/themes/default/titlebar/ontop_focus_inactive.png create mode 100644 awesome/themes/default/titlebar/ontop_normal_active.png create mode 100644 awesome/themes/default/titlebar/ontop_normal_inactive.png create mode 100644 awesome/themes/default/titlebar/sticky_focus_active.png create mode 100644 awesome/themes/default/titlebar/sticky_focus_inactive.png create mode 100644 awesome/themes/default/titlebar/sticky_normal_active.png create mode 100644 awesome/themes/default/titlebar/sticky_normal_inactive.png diff --git a/awesome/rc.lua b/awesome/rc.lua new file mode 120000 index 0000000..40c842a --- /dev/null +++ b/awesome/rc.lua @@ -0,0 +1 @@ +/home/slash/prj/awesomerc/rc.lua \ No newline at end of file diff --git a/awesome/themes/default/background.png b/awesome/themes/default/background.png new file mode 100644 index 0000000000000000000000000000000000000000..0d882b7790c2b47508bab27e3e994fd02c1fd2bf GIT binary patch literal 43786 zcmeEucT`i`*6$7=AV?7uP@0N@inOB=I##d&Dk>^XL`4OXP!nom0Yn5;L{XaM2uBeR z3keWNs8JA5Q39k=Lrp>r5E9-Fmhatr?)9Aa#vO0GKW+vNR`%YkHPxBIq%Z&=@lsk6yt2~RWeWTy5wv6P5oz!fDShS|_A&xs)Ld9vsq zWXJk+6nJq(@b2Tm&hT@=NUy-N01}Bbya4kJ^7cZUHG~KHq_eG70>JaQy}Py_L3Iq% zSm7G>4<3FhCk<#lOFX}B-`d@ravnWm-{ThQI+a6fuRY%}dt=KjGux)uWgWVU)0f|e zM=hP_%nLd5$H28jpFNEE@!j8sfFcI+ZS;$Q#HsHO|6%}9`~J+|7;FPX90EVT82o~q zpSONN&Yy4n$LNY$`i*$t&ujeo%719ppN#ss_g@VDOvRtC{0+K*AJ6<;{1<~?kn{7F z#3@gS@2vYV_0Ki_Jov?8KX3h<`tJ<>%!EH*`47?ce?;J)srd61NSmtIH`e`}`WJ)$ z6gPg-@gHK#-=XX0Gd~yq#o#|g*H2ddT>KY z|2y+n#QZmi{1?IhFLd_jEij0b{%;WZr=;zt;r?RqH*ET+I{yL#f8P2jlfN_g1zkUH z{S5+tF8+50{}1WbB5Ry=d%6w)^;e$yr9d?Xi$azEVYBYoM`vXNSN4HtnjREQUD<-IBZp8;BZ2O%W8> zqEiw~6MA08Sk&)OF=J^Ws8XOb9|6OUWW*55y$+xDf4q9P*JGWbaT#a*XHkZ$)6PU0 zde!Upat?iMb_OINY7(auG32WQ!yEE1tsuPgy#y=~GX`hT!TJ*7HcAuIJ0WN2a_<_; zl5g|f~00SDkjld9lXa0+Q623T^SGHa*k;=f;} zMVc7*SIdC%|Epy<_7cCQRSDDVnjvDr0x>!ZNd6(YMf@Zg(H{Q&W~zkVs+*b= zL2fKCWkCf_4H=18BN8P9qLy}9oMd?N*XzUsk#2z90#m_hM1!T6e1d3JMa*_UQsUGp zr5&eUn(h466Jqk2xW5qbS~2ckP-Nevw=l2+iiJDCS;0j_8hmN5S>)KOUn_w#qUX+n z0{vS}+9Jjs(Elsx9QrjO7tBKYp8uKY)e<{slsOvk1_1Z`74EU=994+s9r0!t6S$zFPiTJ4EL9FRT(2_BR}QvJ@8h z7i3`e{~BYI7Zb^xUvtBF(Y;@zP>$EdN(o4t_?`u!h)jRMTETC23pP70$xQz>6)A|x zKJkRjzZ5I8!{8satAO_)kkh$YiA#=4{svVdoCU?>XKLh0NT>DR&U*Q98O9p3OoU2i z73FcwVVQf0PltFC%u83vyN1rcSb!FARh%d2WCOKtVurBVCrM!B0W`*JTMa}28y5I4 z^$ov4JG-%}DHH!@j5(T+>dMnD27;uWZM?m03hOtP)lLe zKj5JvhBOp6B6Td3ZC$kedbW#)nsu14bV1bsX(ITewM|B3%EJ(mUjSw7F`uiAsgCk* zWreWE{J-nGD7*%TQ^4VGFem~tJAj@MI&5API9t`2>Z}TTkzs-MR>^S8C^Mx*hw=tH zDC9jqKvNR*PuqTc5kZ~`rbxK2=2MGHAR%c(0S_(suhF%j<5Pr7o-QeHgKmuu6&bdvG76oO_4QyzbtVI z6r9MJ{)0{p72di0Vcn0v{BCmpYObpw?138kGu{vdGSVW&{s*T{UUv1k?vKs?`wb`~ zgx7zFSQJ8m;T`7B&d{MMCJ*`7GT8qE@j>za>n*PBdiqbR{R@a**Yi2#@9?34%=ue< z2)X%BYyPVpt_Bzj@bV)P1nK`4054GTJq#+`iwhsR^fzX!-1;{*5DS9T0!)05Pyd}D zskon7{0l)YCMN&2gnVVH9ytE6Sy501#&g?#NbP?DHC<+FIq8RniHz{y80I1{rTS;Z z{uf-^fD7{c>qT>xVzjN6|1b)Xr~212*nrdjYrSqkfF9*<$lx;n?{IAmWV+<) z6e#};NB<2{4KjRxJoDYm!Hxd7q6Wc9={32Jm+t~O_5?N2^UntJ56WxxyL*?4X4yFN z8Gzqw6}|D_GbRQ1UXp3RpB-Iq|4KQvQ5VS(_^HyTA%awk`cqus|-zol% zG;vWhHQKnI?A5KVRpGHySj1(tRA||R{Q`HLb6C$lmu}Y+0Fk9}(l|8Ab;Z6}$n?Qx z+rp#h+>3R6oca8+p~)6j;ZJ=06Dl*`UnM(~*0R@%A?)7pSvjGYYldrAzNwI6YR283 zGlwY+&6jX<;=9`BY#UM<^5%K=P98t;5cDViWLSrG4(Hf*zhNx?q`3dEXPlsPegY@n zWqKIdIVd59_}Yv-JX#SQToKLpVv|REO4Rpznd_`CEbsdXHVawsPvGLdgiO00@n3od zdNkNy>7>2oB8yu9SjZ4?PRaik_{<5I_a$}0vm1{qur-% zQt@V)_^I%pq7&IV82kK0bf--K0X0*6`i&s!v{!MuwB@srP)lj80V(EYnmuvE@7%%) ztWFrgZf~q$__$_kaF{2_+owQY8A~n@oN)Cva$23dYSni?xR6SK^MAMQ6AH()2z!j` zo2+ljE4&$_J!c=@9W(FIko+iqzrdXGc}5@kS%E0kw5;aY&P=}7Bx6O2jSZ_&cXBZk zEHGreYyQG5nx87yi%}+e%eJQG7T(LbMQ~aTchA@%%r+PifA!65xM>^~$2!t(jh1cH z!2Qh&4E#<(`c{CHemBv4sjvUG>?Y5W^4ZzI2e%eG=h_aZ#U{L$V(R2&lO7#XAxUQ#7{o8Zmx4z`mkK4}-R`xTVI3dRW0@p4bjlsBAsY zvrVNrT@?!Y7kx8O=Al_$)6UlOV3CKs=MLroa>e;PUsIFdvnlvz((kZQ z&F@pug2-ScP)kUCHrYDm18d(QH89%NQ74ozaYm9II86E^nY0D5<-z>0#YF>qCb~5zHJ`B)rJSW&$MNe(C1+vRc z>(5&k1DO{AVF0Nz(f7gI*C|-dxzeF}zo?lI|I#VDy7uq|>}LMX9;n`IRR;%4bgf?& zjL~E+x+mkiF4qspLSJK#v(2e>7KNtmz+BJSCkNHxvLrLt1IMyVPo^KBzZN_Wx0-uZCI8z1`NwhukWFus!DUo6;bv^ zx+^gXZz($>R;y^wX(bTix{`9QFL3SL#o~40Mhc?T$jZWY#NxN~x%BH13fbRO&nIjj zl9bhbKf6KLttyp(b;i4lv6 zaFs`j7Pzqxu&)B(GGS0r07|Vxqs^@%f+}Arvn0dSiq2k;?aOayDV@aH*(i!}rK|j3 zZ1%+pL#^5k9(KodYU~o!Sl4^79GfU1er&L@EY(vX!(SVrQ%iZyYEu!EKGdy9$MtOXv3<%xpFi02%{B#fwkRH;`)~ zX5lX!&-_;E7)(cQ`U+T0ZO)LrJeE|g?;73cF`i|Gj5^}890cHR1;Yhs=dKlahh2o~ z58Kgf%x%9kHCa%!^qF;u*rKKa+A@gQzCScw(j0W(ncgVyPMNjvYkoAI8TYQUYjCgK zsu^I8^1jkr*iT2?46=?COeNbv%-%m6Nb*qUX_npb1CrjlPbsoY=INpZRlE$ir*)N6CC13)K>$K0B8j2dL4MvGt^PZdv zdQ^qN-8+VxoBn1`d$7su5fLd`~68Cz&|#M{w8g>e@ObulBDKat)S~AjVBR|EP4xS9r5C4E-5`6PUK|%p~A@v2%di23=^|?ODEgZO|<< zs@~hg8c=V)m0=cAPYqixER%BE9NM3x-&2=>i&{h#HtnYrv(A)4P}h#9pZ+~@j*Bmo z8r!PJ2v5)g>n@A!Y7J5l7TYIno4<&2TZ`tX_7TcEktX33y0boom({dv$E;cIA8}EM zuEHRGvffIJl-U#Wa|h^Slz1xn9bNbK>(=gumKs-bZak>2KawZVY2nIWY(@^%QKeTy zpI%cJV=L^Gq}KU#6xb5?nF6-a?G~*$%g%e-yh+mXPNBWRp4_uoyJ49a;=&!Oa;0KX zpn~_!NYLAqvKR>{_-}iRj_Fw#XquREY@^NJGg9Vv9k-MVVFzBT4FiF5(D%%|^82si zV}!okc*5?kYCWTWQrJ48CBZr8+@s|_U2IcaKHC3 zuDILay8g4m>M5-fv-29%Qr3r;Q=i|0j458WBZ2|Hdrk2LN%awFX-112kz^mF8*KyuAW~-( z!1E?h(QF<3!0P+kXkOQ}OwCjYty+7w0P{R@cV>Rx?6o>qWcG(_fbF%?{MHGEfKcoL9dQpp$KX?t2qqMZ6#E!B}}H!aW9e@%%{_ud%o2y*Ay@Y#;r}EVg-&P>n8|{`mLYc}MA#r|RGYR0!tC~Y@ z2UO&ttc%xcj=z0+&JQ*=`(O}s9car#-us99w&RW-fGJ^;-TKcdl~kkf{DY2w4I*c> zXEc13&6Wq-zSoOIiGtOA03X#H4-Y^ZaO)IGQ<6)>W2mcjVCg|HIC_f|}m7$GkK9*%wPSbjV|o5}eQT*TJ7Lur%CYAVlqp2Rpd(b>HzNK`R9rh`hhJgK^Po@bBJrR` zMcam7XxoNMepVLTy?qRV+GJu~0`ZAaX7ij|bfYxU1e<4gqt5pdiu9;G{jRsf>Ho1h=KDp=y^^#n zZ}zIy$cNV`6L<=D9^1`p0rRJV$NqVzC_Dd1R5>pt{dxmzUfqVhSAtm=z=_NaeIZnT zQZ#SnFq~c|fq0wUeyf((sF6!rmf>4*H)kaVJ8ZLp_o7#RN8q8gO|nFSc1c@<#28v9 zw)-*Q7SV<4-kd}h8y%*@eainqg3o}A4|f}^VXxiv`a;cbSstnJALBk7Jb`^C$$Yse zc=EiflBea8;{2Wd$(KSu9149m@P*3(tBpnpcgk@$ADU(Jdu#MCmQmu{u0r+RL_FC& zYZ5;EsDwS_UkaH%BG~F2vpJP7^G<|QVTt%Qm`uqztE8n#NbLe`%oCWirnwqAvBth4 zb0=Qwno~x(?zd*df^var4qemw%NUz zM$*LmEhrM$^gVLgu7g7_qezB4rA^4G5y1Nv=sL`0iQU%*b~*$g)qiif))ZA9tz{Ol z6%-`v2!A{^efZ8{rCWKD-Jnx>HaQW%=tMbr05&Mo**Bv%D^X5OzrX$;@J0j@^ye2t zP&YTw-dtfHKg~Y48ryguYst&p3k6){upy5}YEF-sb^A%ViX+wRsz_EbfR*1WeA?A) zg~Oydvf&JXpDm;FIlCL6+Yaa+K`LdEmfyeUnXZs^U^4)h8_F+*hbEvx1260{j3>oF zP!IF-((Oc~6?`p!zy5O3|B%96E6z2tPe~}x?3&To9bn8e_F%fH!M2e!4%+F z(;7?OTQBO-BxJvrBf2|k-HYp<{e)`nl%0X#YJVSXyBy%rztH>=1wZGMC7EcycI?IZ zdRwg4@%Cc=uFH_=<35M5*q~s0wP1cy$8r+NNSDJ2dmoiuKm`yvFfD6A|7eU zGb!fYU9`I#8P1yiDeL>`>VZg-T**_P&OWOp`^^EKGF;t`0`c}o-zvUhtZr@bCV72l zclHhdram1#@UEcx!1h7N^u4b`yI-hf)vK?yTbixoIW867Aon;BM861>vU|_?ZT@xA zYXHyjdkav58wRzWjAm7{duw((h063ai0_OY0aRl(m&Ce=nwTM4GP4idWo*~-7=LpV}P7# z%r;OVXK$oOtfc`NAq0WIBYKi9BxNUm$hvZswYu|o9s-}rIfMv(L1)?Cig@&DGN-`i1Ct#IOp96CKp_E6)`@xdHLR`ap=|wlTX&cn4}dCTH@=~ zJzs--wVcWxn(*s+g>chIZtxC(frk1tJO8p1aNem%fK7U-k+_E&Wtdd}AR>~w0w4989`3^x1?79~=`43Cf$3*U_ zXYcQe%7?jyYow^Ft47SO_}|z=;i*)+`;qz9^)I3|oTZ5YI~Z@@w@2MrbCi&D4{p70 z7TH7o>g$5QEE@^a*NQHU%`U()tK%=9Ph67Ww0 zklsv#ap&8R>0Rfj{uRrE$X>`bhp@eO8{8#mx+d7t$@qA8sg_KDZN&^#gvUu2(?}gt zmrU7HRROtfdP^}*IV)`nlgXo3C%BWiK>d-$OivedGsTXJvs?C1htzlcQc3bls_uH# za+tP7lyzgotT;qwK^-sErU@ zeN<$+G2U!zIK0+K_GtN>TZ|}?J8L12OsX)|t3mn9) zg4|I1rJ+!-FC&Kiu*hwxWg#AQ)i3XeBNz~DGlJs&X2j-;-QqV_{5E80o~|NgfZD@+ z?^|xyXzgd=qLd8?{U>?&s7>08GgBWs%{@-RwC~0(sc$Ikj8j%1I*>g-RR`ps$IljN zuLo^E;{w%vldya}z$=mqae0Iq5E}Oa_~>Mhc?W8d*r?w{RPHk`QNI9eUO}eQEfuoX zDWk5SRrmY`%!mGF$xb?T5gF_SefkH*`(r+S>TQ}>_&W?`3q5oxj3Pm4Eh@(D zv83K5bTXW5f#kKzvT&c$%O_5c3|WH?kHpz#t4#G)XtKWAdv|+@1DG`40=3*$8~1T= zxLdc=?A#VZd7`GDgS$Csotv8Ei1voT#fw6^_uzBG)(QpZs~~1W(bhw9RPjY!?O$FR zZxS`ez+#E!d|LV-t%AQR6o{UFfi-wQk)*qoRm=`xmEQ{r{NkgU*wV$P*%re|wu4!P zS|K_Tw6kY@dU7-{W!G_|;xGYtwj%!{EmU2A&BH00X=QS>Tp1yZQHBcP!b#b?2({BY^ zPs~jU*BAjD^T49kBcp9P0rX?!4HC>={=`0bzhQj!QKXFT%D8z!L!er5>YHyZ815c# zPDNo6lG1UaJYhQ&ZV{@2vCQa7T!A9@(1^dU#Mm!I>ZyeCua$Z)F6~v(jukvW0c^dl zx^(==8mjzqe=x4rX@i+Xz5wHC`OH%Kg*m=pZ8~j>7^1y-)+{HVq>Ug;{gI$r2lztl7G1p3j%xK%3uG#yGk86V`kFq9^aVzae2D$Qs4 z0Ts4LhKEp>eJ;T4^8_L>C>EV2TRlIXA`*tEw@CFKrrD}SDBN=#g}q-47ErAcR-)#Y zujZ=krmt~TT0(S1V&(AGb+lNYVVSa`CotjfJ5%FM6SPXx`~WS_ntW{pUmlyeh*FfX zm{QqF>>S^317ufxLNBul$#dqbrGlAe)>mJ*djy41I>O{}TgI*dV_e8L zLYghLoQ<2(!HlWv;?(5?qqef|D#dOAO zj^!23CC7uhzkoX`ecqg@or&0s1ft*eRg7n)Xo>a#a}X#=E@44Py#QQg4}#+Vw0b;C+sAAA<8aAWa=cgb*mqxRdSFWEtrDT& zccc92BP=Qq*}%>K=C~&g-@^9St^Ep?lDT#rcf&FQutV{*G%qaSk970No8!jA*fZkX zp+8n*ldq|7Wlm|rA{2_d+b^3%T8Z?jSqy=HSAtezzkEm|k6-LkCPpNC`l=DiqFQRw zo{WDy6m~6*x@i?W(%;Dx(5^T#aHE?F?R~qXuEaj#$c@?($aK$Fm6Tfdt6gLK>r^0e z;xOJn*V|DEx}@fU6tiVfSy19ud9rN~&QVQBHnJzgc8url4sDQvK5)kw# zmqsX6lrQ2j{nRsyZ(+~h26v}i;sYqG3{%JRgS+SZhU7l9S}&Gls$GJ%PO#r~!7h3s z-~HiwL8gl${_2i6S8+A;J%+L$r`aA>v=pl-uN?%otj@8vPi#|dx_SMJ9)?%op38j0#JPoWM)$JdcvyG(_@G3$;pqT+k)D*3+mM&+AnuVF zT5S3-!ABXXaV)8dS?mB9PT))KjhlhQ)UZUiAjU)P!L+OSIGEcA#w5e=9NM zqG6oDF4K(EvF@a5S?6+-opAaVcs@W4>Jd04zT>;sIW)9d=icVKw;$8v${UxbpQbt( z4A)&NO;A=`k)jl&@Gjc&cHfm$l9T7#>m}}S)ZnfW>Bs&o7QUD=2#ve}X8D_;QZiSN zWdV0TO;1^a$TnXQZtXVR?$3>lvC%8gC-q(G8oRl@r1=_kirR}|^BIG6t9-bpyrI%gZ6bG%fUIL;eC8alc$xtiuAr=S!& zUVMul;y1O)ZzQr4-DY=E(dXZ!^%z{o zkKcu#(p`!nsi356;Yf)9=&hHoegen|FqaLfPO~hyneK-l+0;>Nnfx|kMOe1n{+zxu}EM?#JQ;};l*VghAJ*gY6-0!u@(`H5!{}) z=Y5v*mdEon3AfcT-f$@G#HxaqwZUT$-1*#s=K;8T&pO%Ilq8i{f`e?Fk8kG+%Dms$ zh3^o7Vz%+So4iCa;H*Dc8r;n=F;4<_Ag>73B+SXyF> z!hL6@{R;0w!RjE`J4w|JF1u0kX(t<43Ju3={?=AZy^Gs%b8)sem_Qr*w>nIhVVMWj zS$o>w)`)W}Qbwcg9~?NyQ^|Nz(|c`uN!&H6%eDgLq-3y{fVK>OI;PGZ)GYcGwO+U~ z223PwPSCLK>xa7ic?+OGSm5Z zHQ919r0vsdtkSh>JgAwK3dlb%h?TKDKeo=`UVR*Tr?_6m(1U!L9_Vt}dC` z5?F(xj)hp!fXJoCTF~6C@|nMIm`4#aKAfIuIkt65>p?l*6$rPx9Y1&Q-V%KN=|r({C_JC4otmB!IF{lqBA6oGX~sNN_LIoM|mkNiU;-CilR z?D~6ayPnxmv*<1I@cO-@yfeJP(xSoi;pcH(L$`JYY}aTCYw50ZChI#XlWgvRTQrmb zoz49Uv;GOhF%2+qZe~;)jr447GRE(H%r)}F-V}CHR6aj*lKtLfHn`03D@BHQsnNGi zdpEXO-u;-4^$$t~GWPX1M)>&NhM1k~8999&OIl2q2EnrULsT7YpBHb>+n4G7-B(^& z+ZTeHw_hIoq=s6c1M?g$1_LEizdL@1+!W7Ov9`o4W*%QU`7TE4W#wCn(`})qIb!fw z86){R{Ey?=2yH_{-qO^F#CM5Zqc1;Ax0UP?=N9F)+k3rfOI$a#E5J(w3@sY58HTng zxP)!^`I@i8;~$dU+1w>v!ftLwH&`_Zdl1`s{1A$1Z1o^0rh0Q}c5;)XwGdexGZDSu zt#ec`dXbTa{*Y7o(x4!CRULVm+zwXmq#xhl3ghN-PQH&ewn&x@;g? ze6*{457^C663lfP>c-{4^fLp2EcAHj$dk-i`Rd2qdcx-7n_As(z#fGtmUUYeiPcP_ zG?hdTCz^kyY@BGd%7xAmu*(-QYj$w(GwSL7gzUYb>DfyYpCsdpnwW`%-9avwunA0!op$eyD%Wj?xW_ao++gO{&no~rtAJIF33Bq0<;r5Z3|$)Rd!SEuX<(T=&cDikoO=jbcQrXg27>cH z;;+6b**^3})7P13u~TvJ|mtT3G}m^Mh)b?kr2IJ!-;G&-=kZQ%9w*vVEsV^D_2@ebfAsDqAD_ z?=ArsHA{Y)cyDXpO=BibM_d*!I%t&S8dQ zlxFDMTxP$?V}*_Wx%v7IZ+MES{N#6X1q0$&yS*+4Oj$77W+-5c zKWrTkHJXT&OKw-&sHiH*+{04jZ8djO!>GgbX{0X*nsG)bki~eP*KouOL+U^l7<1=;r$A=ziDS_5*{D`k0oVbsmJCDOw|N>u4Y7!85(le@7T-x zyMPKr?l^#26RYpErxD9>2Wx2D!O4)3Mwz0VC*FR&H2;Hay*1DTl0((#^yL8hNhazQ zWZJHiz43(Q>l+&twaXu8$+!qqM0QukYL?$k4&A3K zqi3;BBZ$(kwjE_4GyhU020N_!Evg)EbeLvaQBkGHmzyIZu9xqY?WzK-x}MQrd@MV~ zw)5dvydDq~d=TRX?}X3ag4UViO>$6DOYkKXHhcKiUxB%a5Rw=67-K~B4oXj{rQK5yJI*llV!@%#3H)lt<8%Vrkk+w??-h+ z1rv!%+}TZzTY-5SSz?%F{vB7a)EIDSbDSkhR3XM7 zX1-E|RqLr%(%8hR_l}G8tXAW-Vv=9jcjki*4$S6F;XsycHS}42h9$MGzgr`g1 zd2wFZCi@H7OV5y+sBt`7cj$|*aSeHLmX-^K@Lz}gQ{J=IxJ&jLt_idq#g!qbvks2# zHC-78GyDJ#cj&p17h{5JiI2U_9!PY(3otVRv@K|j?bYs%a@tm522g-ZaV({*rKBBL5)?t1J>;+8IE|x+{2%tQ52v zPbYclvr1)aODSe9iRC8}xpp*Rl*~Z@tPUc z6nmyY(3(!bO$GTRmKLF24Kq4~B|Nm;^)7J*!aLitOeLU-wKX1~x|o%>w!U`E%)&Wm zHV7-8YGINy2;_@07OlrRGOzZmgp};HDo{@%Dc&ec+f<-@9qe0=i)2_?6S!Kv$N8u<&d?o^w@C^{SJpLY26mYPm+t z{M+$&^$HZI-2&8HIwOWSUUQY{8d3#)J3yZgH3gyb)BW-oh*>2lPO9q}W8bN7vNq!jw;3$x=ocKtW|-bAUuK~7n}TL=oODT%80MF;bPMgX;U@m(M16TqWBX*EF91XKAsAj}a52>UXkKEonwIx6I=XA$D+o%sK37w{ zMy86DqEMCCtfqKdh@n=BeGRM}ZlJ~JbSy{Tm`vE&Y z5C(?<(Gz&9=_y=d(AT!~km{5{352I}c~mU@lhe54>ajiv`f04o)H*8&mGK4kHJ-+< zhNb^OG3}qy4D?<^RZeV96RZqO^32)+RFL^i(lPh6kkm)KxeM=J~q+$_L zaLo#3#$E;1ylegS62N#mMVh$#bX}(kWuH-@sOupxc*OAHn?S!(xHRL}gF9sd_k{iU=;0uo6p~_L(Bt^l+(4!3d zX;O?VPv#i?!DDgI$Y-$$`|r-rbF5HzXUb>C3zOdpGr8>6-MomghhOsfPGBAg zzUeqH96Op9r%rPle^^tk6e7gZN)Df{&Muk!<6|tLyY-cQN@z&?2uXd@{C$41r|wMY zSZ8;xTsGzH5*PJ%vk?Wf3;k0miR_OxlVy``W#e01t{pu}!|}GvgtVoo!Y@WOMag=4 z*A@0hOtX^-U~pH$@9+HsZ9mrI**)lCbiuFMH*%(f+1`K!UCh<&k~}%`u~dWnv-v$Y=$GIrO@aD~E+oOT=UuK0bb|z;N9LJEojeJ`cdjPsI zA}OFGR=0VtWK^j0(217YD$Rt!x%Qmq*;rJoT2_8|pXiYCx6jW3_yWkc&%YmlEdTb% zF9u+r|JyU*U`a2Bz!K2j-3#-qk94fb}r%a&Y;V|msoML^Yf!ExgpvK zQGaw-pq`)M_0$ zwx)nIq_r%Z{!UEYV$6zlFVy{l8rx;SnO*Br0=NNc~VrG?<>d6RQ zlX?8(fz8PZvVB>(Ur_SSQwMxHXPSq@4pwYzPOr~8@ik0%bZXPc{({>+$e`vKAd(MvL?)zgy^2S=oI^1TC z5UWpZl0gT0c*j|OlA)z%KTqduQNa_%47xSnEsQx!Zkibyj`ihICrkP*Dk2+=!lTmAn&z)g4ZQVXhYXxAs3qez z7A7q%3E%fK zlYLbd!LX{ z_Hmr{F*Y6HN~VVl@tiv8WNOZd25D)fw1#C`P~z^c`mTdh=Pt!SUGCWlZ8v*IpLmGQUfO#v-`cl6LM3&QdQn(%>@DD-fq%U- zH0G4M%9G7HK{U)JMNy@i>uNq1{m0Vi`T8Yqgv2{E>t!RE)7&&4u@{O2<WsHONW6kbRHLqyc9A1C)L-T*nwU}5 z?@2NVs{YSOwCmYP`w?b!;Tvkx?<*%g|e^)Qeys$uSHp-=8aq^eoX&piv5 z7Os*I9iASo=G?RBs3J{Ycr}lcJG`+9kLg$`CW;+z4Gr-ir!~X7~PRHCUzIDvUfJW==QMPQI(iKk? z3Fce=%i`526G>b6vMUtWK-S=)t>X~0W75$_^&|-SOD{7PS2nmFyBEVW+97&T;KnN9 z-57?^(rQlbU?+CpTw=-Bpt~;-^I(@7z1L+zMf1%l$d4BoSS1Gq5=Q3_DQa}TV9qFlH9O&v*$<~> zTz4jS-eA5`oGV%@fxf=-vV%Biwc8S=`AGgVhC?ZBJaRfS%u@-oIVYO2C39AD)m-%C zxhW2qV3)}g-WG=ygcQT67Z|SA2l#h)Gv>Gy?g2(D#gdd%!78K*4I^#AqK3QEbdFji zKdF2~FWfbjE`5uKT_e@>K^O_P1EROT^IzeoZr3()HWYq(oo9O8Xi3PyCIv7*$2(dA zg&xh-oQO}8t3oxBR>XQcF5xM~q)1oM9HhZMR3RhXbtip5R}xCqEv>&_*=e($BOJQe z6t!(w&CPUqWM0=1L>Q3eVj^MN?;X(}zS<0I#7?=L?pJg(m7B{svvNA$|IrgaSphOe zad^fE)Y_bA9VdZd4I|!BU>L{P+6%$;hBm{W!+CSB)(Y>^wiwhgpbQaYEtg<6Dn-MS zR?SVBj8MMbubAoNh30@&@N8cQZqsaN>C^G)D{uy=#z)}%kFM5Z1v8)%k*msfigH+9 zus6m8dzzTI+!s4yb8Hw|Utw4DIItJvrj(eiE3#MXAs$*d`*FQIa#<`tOQk?FMj6~Q zY=yhV743B^F-8UwOp5wxL~6(dA0J7VG#RjawV$;}LGyA$ahyEw9e5CRMCdECdfMSL zWZI!u8n1Slu{@6X%Ks6gO{HTC*gjlxz*LwM-U_#MCVUk~lsXf@zJ)40=k3?=JJp;- zSQY$UONDQfyT`p?fW2Y1E^SP+_A0!v5*j`1Z~e(tDV#tdz{t-Ty5Mo-TB_-2@i`{- zWdHdRPfGje9TargXO;_hGJbhVdTjTLQy>6?xlKOfEqatk=(jkuZV5I^jlD|7$yOQ( z)zsK5nX7>zwi6FZj!5_HE&w zZ-U*P0X>^=atESgc5KAW$KW}JDj12B{!%#0%4eCBdqejPuzgy1Yq zbkAZ@tY+&n$1)?iBNty`_YJ$tln*%?NY7KgkdJki9?|bNmB)SE>7NdioprGW-wXI$ zQmXB&2Pr+h2evXXVaI3-D_)d(Pmghgb0LrRslk@VD11$*+926k=W0hvlh^u9(#KCZ zQi{0($$v4$|yf&_o$7i zeGs#!if+p=g&*<-<2w-4&6l;mN>{4qUXm5(c9b8#Ai+N8+Mm`!Y>^>4KWyCP=MhQf~EuC)T#wbpK2PgXY{#RC}>BjW@ZR9pA{BWh5TX6Zj~!rx)T<<%bHq` zj@I&^G_MXlUZ8#>VdrSwo&}FT!R2Qm4b-fp?diW+JXNEj()(BXNb*dUTWMbgAxYH- zGTjQTzRG;H`LdDfRVE&o8+HXeQmVEf4gvB!x7|x|^B0(XOF_h#+r&y7q`?;(h$V<# zt2Vw5V&iY4Sn_7{{w}a}m~nniZZ&w&a;|jyTxRPD0`zemV@qyygH{p<7L=`Bocx&S z^l%_+$MlGA2i7lwMSlVx-oUt4iEL~ppx^p}CtEHu{Z}B9 zF(LkPnsTOr^~Wf7_yuDK-0QoXXjTkoG*}ElcC}8{UjRqiRFijnh58lFE3Qw90x^$# z|1lWDQ1jITy(P%#5v${kNzxmIuC%K?rbW0DYYkRmEX=W?Nk_0hJ1w1;nn|ac8htY145F-r%r`2L{EX9^3M9tmI zVjnTW{(%EbNoS(=J~4!&gz$*crSYuoDvl8H4Pur$=<7}mvD#V)S4a$n%vwf01ovrz zQ?{~&09Th_LQ`|lS6sjoTNhybO~NE2p`#x7lHF`#cpV4hYK_gDPFxv1bbxP4r<=nj z+;7+pfOO|SQ;wk6)B6Ij4le~oAExB*%%%HZ4phB`yQop19s@E!&&UO@^(LXxq&OaC zxt!`Q%|@=l`T6#TMP9y_U6z0&JG6En&oOh;>Jt+j0_utDN9mxea6}qt%_} zrT}zDG%v_g%Pb^Rx0R>dFOOt-1L-q%CUL7JN24BD-g#CyeBf1CVH23U~=xJa&Gz( z$){K12+~$hfsDfv^1K}(;s}^T#aBk?#}htcP#I!s4(7EEmv&p4+PI86{zjae0A0QY z(Zzx&*ese`eSZV9IY(4-G!|Gs9$;ManU}W~@C|i@p{f|tW`Vlygrc`s)ljih`pS)Y%?cBISTIjPr7ycF)TWfqW|^Dc?q%c2|S_A zb={as4XvuJ)c?~wjAD!HO@8LFzDd63Xca=RUPDjPNe9TD&eyOWH@T6TxO_FXaRORe=8@ z_b3_EEW|8x0~5Q>naDZ(Kul|H(@edbWV-g84ADJXkUluU zsSeIT7s}fT%FM+P@9z_G_chHqoTjjn^w8c}la#PI>-LSpXgQ*uo-(GP3f}%Z{6@d) zy6Iz!%S%Q>h909~FO4X7#lq0%1~?ug@A}8KnT5v3aBUn(&$BF*1Q^?84*?i$p$lL5Zq;|xW1Xga7E)VrLl8aDUAM{l;3~NT*X6O5y0F*` zlK162c-R0Q!P8EvJs*W~AIlN1THiYta%;srLpjm+8Tz8MPD%qchT*=oAxS1M7(f!A zk&ot01sacCDTtIhbyF-5Brkdr1Ub|Ify%b>$au+myiN7yx%+~g@)H{wdWa3CGmw?4 z-H?c%#rc0XiBR!|bSD2-s|=Y9934>PrXyNkWncS1ki(YyCR%SOQ|S*e+X*>+5W@bu z9+m}z=vw|&jy|}Nar$Q&bgy8rp8&6`UFb6W2wAY&0fO5&S0GVu-z!-CgSq$;7io4~ zeC!57Kv`FCG@ijDn>+R|1^vFkA0L%U-0U}`f6J}e6@DZQEj|`K?j@i+sKh8k2@tCU z-)KLv&j$bOo%WNqij8xwxX8aVdBzg;c_#%qZ5_VCd}2$Ny9E_yI0C!CMMyq!S-k$V zu~>bYjh`?l8o7Zpe-9Fh4TiWR*W>f;1W>j5kz2C_%^r5ja{f?9^Nb6&M3UZ_idT}i zIjM{3#xfgWPRts{$(t*yA64OBM(>7~^GA1Gn?chY`w%#_aXR_I zAW#mq4qGBiG0KsuUQzmyd1Cb&gcuXkT!i;ZhiHB2?}D6_*}MK{(1 z`TZ#{?hp#0N%`zKfTZFq|NaS)H`z?LShZcV(_M36?OD@Mjx43x1}xzNAhm|HsXSoD z6yekR)`GSGLu)E;Qi#E&3NzmFmTM=+=~Bw4*TY}etojlmE0}!9k3~JcqY$ZCvDpuA zU;jd&ven?TTaKWe9>lyzE;27ILX79qF3X|5g{7sEN=uACW$tD zzse~Q6=I;L`er7-_!D~0-wsu5LU+R`W?M3>2jgT66Yr(H=or0tnAMX~bKZg-`Xgu2 z|4aH`Hg(Yb8}w|>vZv$Lx*PoEDJpj&Zoc_>beZg>bIey%=yAB9f#sS6^Tof?5x6;LeZwdr{m4SUf z!LYTgPsU1;ij#3RBno&i0Qj}27F&#I~_+CBO$|69IV(V0L`p*67SPpZ7 zN;^um^fka7Ojv+9&dz(D9iHqz#6c$15E3I?aGe0*rFs#-Me^C>F8QcrY;IQGtRiLr zBf-Rfd__O3c?=T%H~^xPwWQpQ>jGltBeeb0S_#!+cq2o>R{%!k87oB6U#LcER?W{6 zroC2w{BY$P%(n}aKY%X5e@0j_44wMzEIfISsV_-J`SZ$HdBY|jrG@k%Q>@tUc=+FB;fAs#}|7y!r)Sn(`{{`R>G3(e?kH@(@jT?f+S=h=UlZ$HPpWZ7JAzcu-$j(xupb0qUqqD5N&rJw_95hN4d#f3LXQcRKsT?vY<>7y zYAbb1b?YHc#e__to)Eo6IVxSUepFudWq@*&Ct|bma57`Wz9B!kLH&^=a!YIz{qE9| zmQxaF=6HbAvpH4Xdf?SqGw?L0=q9Q_TfSV1$c80 z0?IIqee`e7P=hzj=L^M1-7u;8^G)oj4@}IiHJ2plJV8DJl*Z1Y z0H#GdPqn9aCdib3q5wRCo9412fvMa^{|0R1WzvWVm+O0CWmRoW5aN>^!k1ZTNHuhthoJds6TXFa0wwC~wj)qt7wvzB4+!j*WU}R8;x0b6{>Dp$G%~A=lAlS(Yth-md3THR z@^{Wdlu9P8%Ah?DJKe-X`j1z6Ni`V|LQ&>JKE0#exv57J1JJHN2%1>$#KgzS*M7D&Q=?5wut<2b)y)~{W z4}jR|u6<>rJPbKwN(a9SKnPohr(v2qGn$9g;MPxAZB9#v-!JxmUsd@tOtmO98kjr2SD5CXzz>DD(k1G3>3`BzbmACS3T_p7iE9fL`dg##_(04S z0WY@4N{5DhZf9s6<)LHrquqp=uWXpFufTLA*||qRT>5!V$m!xA7jT*%TPyLzD~EJ8 zzt_I%vplBc>X>KIM=D`))h3s#)a_fl+P-#u?nD6?3UkS2N6`LwnrItMB?`4V2G`^* z7>^sPhSeG81wd40x7P(RF}9VeS`zi5F?1sVo*kQP3e8&TAaHGsAQ4N4s z0ie-!F#+DnyjAAW%8L>zQ+}N5(P-{jnBBG#n4XD3Jm5l*;@&REY2Tx%)pyoVDewL5 zgpD#)R%ej;hpgGGoz=LrGZo~sW0o)O5b_7QnjAHufe!;AW&kCtn^Y6Km8cv?dsK$m z(SYgQN7wp-G34oln1Du@h4DA&ga?ITzD;b35%C~Ib4z$MT2+pf4%Dk`Bl|J_#HP#k zbl*R0oovlPNfe~8!1b@322-+eJmC`D@1zD*1q6B=6{KG{N-Dgf~mAZY3n3T~O( zWDBb>`|6o&U5R?nEs_nujV;uzqt7|qZXo8$th})k3BRNgwKZF;Gp&J}p4<>L`gD&> zq%MUwu~OZk6cduvs2s=C89?W>GmDQXt%U-CG=FLSW39cRo%_ulf>|4f1H6N(Kh(K6 zhvv}>i1;90&s3@M;f29gw%1+!f*Bci1kZJyh^M#b%rEO*%po)p z@iaaYgfyboKWwg#h;U^Ts_=D!r&=6?hL2~VwO~+Tx=i$>FcU=A;`!!^LNZJQBOeR5 z6HC*SXuI8n6`Ve|8x*90wi6}i2@84s*IjY0JB%;BOuA6j_aLkzD_nOr+~Bu})P=lU zZJvzSwZ0g^|58RJ}E`VX83NUa}rEOjyChv=t{lof z+bF;r=p5>2Iucy9goMC&O8=j<$EMJ(LEn|Az_%17m&UpievT$NGGU}-N*sP*BnlOO> z{8T*eY3HH2J;2zBYr9J)@maI}0}kSduU=wi9%zGjDSF^+^cpTGFVy z$MQ%l*b2s*^TC0vJ2xRE{6to`D_1(4E?U>9%XjS?Y%Mswog!;*q@#eP&~MoA;27FY zB3wUe>M0!*vF8z;9A%?I$ZAGNiCVITunka$@46dIkqTkvOi1VmIr>`=_8I!q38rv& zV_6gWJN7vtp~+3G*;Z{jbgyJYxR^j-K<#*xerCAm-qcMO&OiiXq(nQW#Vcm+z{k;*N&&IeKK*4fY|(=)VH$Ju>! z`7hjX;+Szn393>Pl!cjE({XSUlt|qyx1p#`^TsA%QU`^1`}K3f=En%z!p)!ix0Z7F z+Obn4HN+ad@CPSer64Nl82Tc_MSq>urLimU{VRqaaIOpofj6JKedUmygvz)d2fejX zF(1v#1zXX@Zx}lAwZq>~>Qa#mkS}N5 z#7DE_d!0uv%Xw%mr-&TIU3yM^G895Aj04j3L!CPF@Ds#0#Fl`MgGlpR(9Yec^7o1! z&+y@62waNqYA>K<(aDF5_F2CT=nS|~n`G_B#0?y@eJy^!5PeubjGrpgWx0opt~~?J zmi286z(%`0T9|Un8eQQiqWZZO?e9wU!}(2dL`syR>b{9KLBwO}ObLgxbl$_WJrgxlyE)dc-$W4czgyEMzwDDcNo*gPcr#YtHf;!@>72|WE| zbq37IBe-(6G|4ce^4#uJ*~Fx)-aKQ_NvJ3nwd03jD6aP@FQCl_ZK)P!=NwA>Sli|w z?h>VNdlQ56_>AF%wK(DMATp;s@b?Xm`E7}4a+9pXv6b8>;MLp!}meK;*(2UrS z+#j#{@ErxA`5WmszhJ^WN71_3+au{UifgCniDctZD|!$h5029HZyw7AxeKdB%Qrwi z&m_XjXll9Y&wfW9(5MiyMd2a28u{oZ`gwjwfQB5TjI+A1CP;9avp8qQPPA@D4{kG= z9%mpmV%n5q2CbPjv!Bm_mZ3WI$NPfc_n+UE>Qjpb#X2oRXvz^K!!3>?pvF0|sC9sY zDXf(gBfWj*o0{=GC8F$s@E9&w*CLtN&=nipNtr=BVrnWH5 zjnW#}TQ=7-pMLJQMY%|nY>82wKcsB(zOR9}iFw0Tw9AGG0-942_$ARMnS!|d7Urey zrj8BX)Z-MJy{QUGvxP}b^vtCtO{cEcIiA&lYu+ZKI~0v#QukLoNWDdTUknoEGjPR| ziTg;_S%8f?PNV$sCbDhB|Pr;}X^` z?1Jd#Dp0~CQjNFQ$j1N;0}v2s*Y1WWbkl7?s1O6+C%~J>Lrjiy5U^omRY1@l5`bJ^om#R^tKEQ{{^7-Uo_pu?cy5Dry zuXu)ULmC`*0!UKSerLDf$`&E-mE#mMS&Tx`e&NByFR+!cSEas<^Ti(w-=FWYQc0h9 z8XUMU)U;^D=}$z8lHkdH0bW4z1q^$pB9JR+AIv|8%%A#_n9xGbYUU%16J>?e7 z`=7jk7wQ7UbOn29&s=~)h^j*>@uCNJWFrIZ_xX_<3OH<50)g)u@F(YT2vU-Dnt-Oe z^3u(^G1Xu2Ecvd8q*_3&JB8B@2s=_VmfVg)I*s&Um-s|UZ|T!oa*l!~gIGz(w0l6) z@{g9uuiFlYkR%#6p5-n4sS!JAD_*D)nbe%x_{v?BN z01BxK%X8p#B-FYRGeJ}ZO6y;ArtG8FcFv`g5zEK;ie|TT^dNGp^57@N@J?WpE{v{V zMlu^(^eWe}d=r9uLYTqb-{n%fIMGr=dXUfQjY40tZ`@$XOzo5{G1AV)sPywTa0=HPs~_EJ#0KCQ(NyH50iqw5jnQ^OUcR zzV|${^PF0yk;>bSkn-#YOZ`*WqfdqT-0J_-<$a2RZWY_u4S~+R|Cn$Akp(XDNH|f%FgV8&2E)9B5H%n3GQpcl{cjA{7+W0_fp6UUp5!S z5+s^}$jlTo0JZ4WafU}cdOUu!_(*8Tog+@rEnJzz!IptX4KU;(m((^U`}EJpwDKG; z1-Sd%-I{Ed!glS>ySr29{x=YFOduPK7;LWAdxp$;MMbCGnwzrwsNuhjcDGZMv_S=v2k?!8lBmNZDVTY*owDFHd%SY#v!4rG$@AT4F7g|CsO|? zC1N*nOXB{P0gd#Q2l!{5eW}&{FrBnECjEFAbxX;O^Z1&Q&~Ts3bcuon?&R@nedI#G zL`|N@iWA_bLp>tZa-}c)qmc{mkkidbnrZVTh>99(!Jq-I#|eklnJw13S3%*fKLJTa zUpmLJJA&CgQp6xQ46p+liTwVGw(BaYC(QmVgtdENK{k{`%vn_b0#V8xOy0#yz3~Cx zjm@#*3%Sehx0$q#Gk~CM0jz-i7M|N^8xk0ZbDtW)95@SuiU6bxfo>LTCNXN7Ee@SM zTM+AZS^{d~#`6Z|^~`)orViqB#Lg1M+sh&?)Ruw3hDzH*sd8x<8+>@iKl8Nj@+jI|HjLTu3&WGc|XB?ot@~*LoYf8?27PP|G;Zv|NsI_Bm+)EO&9(BOONMFc+E%8dyDfYrF-UpBw9Xw^YpBw zOzL_m2_25sItptCfv#>9m0avT!afzaY-dsdbJ^MRT%gbuSg5JKYH{(JSBt4@ zU@vTC_b?=McI}zs;)Kw^7+;#RbmZGI4+(FnUV(ZT>!T~ z8!L7PBp?FJ5ScUDX%5J64uIALx?~-RAt>O5UZC33-*>IID-JU=IvJ6lT|-WBvju2w-2e+P*vL6gYG0qw#i z>utNXA%8neu~ONe;q?TOcFl;bKILvK>`BscG3hoMbw(*t z-HIyNh*b5)eEGU#xQCzm|L%Vif0uh=@;&^W|7>|SL@D6%O~v3zFS^s7g@-vLMV8GB z%U&y~ikbR*;bRn(;hE~tk@qYPy;-@-u93zm&nruD{peyM;<{pRf4 zb8RcY5)e=YfsH5)Z|Q)^d|%HuB-yP4(K;cA0P+tkl@CN6(6U z9(vhpW*NECvjA);5RtG2Wh_>S02*661LaY3>$={zaL~5o3U!C+MC+qotYQGXnR=Kc zR&(kQB%bs^N1dG`0;>PXBWT@p{095!rPsrjsQl0HPzN>vY{y#2;AchVCz?SSW^D}< zV7{Wkgscqz{An49pZc_P4k>7iom+E>A;su4A-wCcD&CW^l$l55KTqNhf>5wy zmhHrXtiQ1&!BxA&>LE$%C~b%Dk4B@4(y7N;)<6?w(LG@7P zQ%u4uT5uUK*p?Y+TxcR{40ObcZl)dIS{niX*-#iXQeCGn$(tF%SDF(W=cCcYy&xMS zN#5I8bJ1~+n3SG&jZ)mK%Jo>bRSx#~$3{+iBK!nCa|h_dGTphOcKs#m&p)GKPSOc^ zdz2zkl=kp9m!2c}dZ?&*KuXmtxZ_rbN+jD9Dd+qVzprG%J?wY;x4WJ^Um=Q=O3mjZ zh-kPu&3zLECxajVll6E2vQq2(dFsGlrWo?>8>Hwt$@*)z@ODGk@-^&^pd_4Ec<$E7 zCK;12g+X}+2{ngtNJ&&cC*kzC`kcYz3GLfNI?9|*56wbr6~9R|>4r!&SqZ>ew>QliiiZR_`GQgk-@=ZQ{SPdlH;TXub9IcGj9LSl%Z5+27pO#{id|+0t;onhL~;T= ztY|o87x35OD{h?qgxKNNrsO}`#HzN5ZM@BH`S381K z&nMTE9YfK2I;ud-vQA1S*cB&1{MfjP2EiIhxO(B1kn&D;h4lu|hGd&}{c1_W#r@2h zhwM>8XeZDoT;i)UfeNseyw!ukbh@%vd*i1X! zSBAOB>;3Eaw)B1oaz4t*;a;OR&nh>4aB-gFOAtgbb z=%Y&E{T51{%TAymxuxf;n|L#j^j+ms_MkV5pKtWQ8H&dN$%qWnz9rd`E=7yx{F8MG z{*)&Vr8yt)+mMq1x_q;EwC?O1gfzmp3DFS| z*uR~7_#?5c+&>VcI9pzBK=sL@DlzS3gQ~9g%kQoZY4_t6SMwGHU`yMHrZKd`D20{G zA9wdLgHDP8p<~#!G^>g_w-FqsbS#i1CE)BtnpD#z>Q&v@$JSZYnuIHr=>6j(_DxK7 z$5KsWN64r0IO9wu7qRA`yx#*EUwIVf%UhKl^4*hwM0cpgLX>c)oekC_58I>4VCLK6 zBL=UHv+bv|blqJLb615PYMy?*63%5_w0Ko};;Kufj+`yjose_C_L#@kS7F+d>&28z z?8S3@H&-ep3UTFK$~L6$0AeZz&~-$GJ>&7Bp4_q<)mFN9wVrImA>u1_!C9lZg7ijZgMcQ=@6GC;QG{jLXz$2|3TwIz=3AklQT zAWnY(%?r^7emeI#>*3ew0RZh_)^zPLxp0F(^mDvbd1AMnAtZjvoeYBrM<6v*dtnrDD(!Hi;3WJ_9HlAa@Z!bln#vMv){CRJWjk8 zfEE8vNF?Y9qWXl`MWn?xf@RJ?ifm9)Oh{`@Nc+THXyYL^`So3>`CRROfVf{ z5~%FMef?f2F=!_>8m7Z+IQc+y;L@$Y`s3Mvp97fO<<98BB$jT-z43rFzI~zcn^K#^ z`zo2LqsMiU+c!u1T)ZF|fto0tWbSxpfDQCMRdSA;P#ZC8{|1D`zfXpLI|JY1mBg3P zAr&L@Fq9a6VmI<4Bz1=mxtSsv&6>)dZ*lzH^X?|aVPgBiSnBSj1VWnFAaYjw@ocAy zB-eQugfV4Nv-&{_nn6vbZnUtI$?p}fJ;qy)<Fu4vQn2e;`X z4V4auSZYefm1Uy|=YD-gTd6+pZoqaY~ywW$K8*E0V^3c#>yA za-rjo`2hg&j$>1+1CyQDM_+JZH3+lY1Ql-(_aKq8MWgd6*m~YLUkP87{j}o|U zs%>Hk1Qg+0Z7%caC6Q#;)p_UdSwpc0DZWaQGo26#DEmQ|Qb`aC?RX2O>mI*pzZLux zsn0!_bG&BaJaBqwO&%{sR4Z{}t1UQfXTp2cUdmcMjt2>L z(D1lq!YE&kxePZLU;3*mQl+6T>{;l47t6kNAYx z;z#=9VusKwAg1jQwc5UTZ~TWjB&~^S&g^ih4J*- zQk4W(uKv+%ZdDB1mh77_X+5B0FQ@j8(i=%-f zwH-iaiPBQ;a>LdfI<|9dgX-d$bx@;pO#OR;*OUv4ci#t+suYZ%OMnnoeL>bX9TPWL z1CYHZCD~(Z6BZ@C-j&n1ufN}du?5h9+<>B~7n4E*{dZv@i7<0Wgx9-{xozs+93xP0 zy*T?Jx~)rJ+x&XRLNWQele&`BmNZ{MpHB%+O7|w)h8E5)o;`tXPdbza8bQ*V=}5xu zEK7yOkZ*op4+Ct3%Z3S?{&;MO%{5YW^%vYhN>6reM+&}ZZE3$busph-$l!an zF8*qyj!M~5W9#>E?u~)6Ck6W(5$;#>`?qnb*w&i!`0JhIf~vhhBG)*3ktl~|kaN=n zU_woACu#)qDOftrGY;$l<&PH&{vz-_;9#%KLL18l&+YT)EpO${bsH@)jUS&7}&T^v-pJ}$%B(V>3+3E-1qteWRU- z^VdWr4InN;Izw!4DtgC@RbA7=d};MR-ji9yzPGs^_1cP>+l2hyPDQKU!xK(>bQ3oJ zRMA%;EJPyIZfNscRz&n0+Ufbe*0}fk=lJA%q#3q?i4x#-7e0_ut^Gid(UEFa70yzT zjIf~v5cP16ka7v0)&ty)07LXFlF{=1l z`3KIEk6kR-hcc_RAJsai;v?ii#IeHOQ2=WFeoAe`L9fn56o{ECQ+=3TM4k5R(h!Rr zMGXtSO{nN(Xy-CE6Rd})G`?$aTC)aL&+Oy4Uj)*&Q5NyKbU$b~2o$WPcvGJ@tm@_b z`0S5X)9!dHXQ6=sn3LI2rM1+W3y%It<8KiK#yM)aNzFl0EwD{F^0-Y*!x8`Ace zfz@vzAL4X|egaX)&cvEyKbPB_*mT?OaNIry+e}BR`Y20XI>TxJR0(=!jceSkMDCT8 z@}E(0k1zF~(k@hw87L`8q=Uv;O&gwqS}yINsxRFsDx0^Zx-}0zk}(YUTYJ8EO7QQ?J$alHf+K{}{X)S9i4ms|&rjU5g5aL0&-e;O_T|h;Zj=VF<&6P}Y(O&}~ z(&+&NMh1^~A2xR=BvzYzlq-lF4Rhk$5V{33-!htGBWG5M z1ASbSZ_i#0;9YXa)nM(B#b;^R`71VZ^eX~Vr$3e7RPhMzgM)V8cigOp+;a-DIN~ap@EhBcv!U0B39~j)u|J|C)!uQ{XZDGc%0oix$DlI96}o){ zLX;GDbL-c6%@=M2+oluWdUJd3g#w&JE?4H-q*cEMwxrOulxbBe&h%GjcZBl`B$*qK zjxtd7A>s3+owK7O1;OqC7m{#~zhR~Q^SxTK^()}-2wiusfJF5trpiHG2tJcGWz5le zL|ETExx)CEQD>?S0YL;v!7j>Bry2(@o$awpI-+E2LX!G){KLC2w#jSGVl!A<`tcgs z#90+|T&ex{+XHr;dpi?a9%v-_79`o{922eEyd4t*MkfP{DgP!{c zhj-fI^+S7X77|b z%c1YFp)MqTx$%NG*CM5Ixy+i9BL(`~P^IGa{r+p2GLeob9}A(iiH}iTAJsMvd_C^u zmI&PEw-pd2U&45a1!z+2vbyvwcWz`gMSfOwhc`Zg2P8kBqO)wWdMLGR>9 zrNe3@srD2%pQC43T3RIWPr7O`53F9*;bQ2^W`#R8QH4!**)Qe_MaX-JXGfuPQbVYL zddHt&4_#S)zF1*igOmkgM5ky6(yfKOO#o^>P}`YO`7xJtXF^exw@6w?htyF&p?@yPrCk$ek9yK4f`*pdx2X*VH zNJ-yuiyv}0T2=JYX_pQc^pyvwBgY8R;3+$N-fNZUa2!iHeKco(V$?nn6347`-}w?> zMCpq(McclIo5-MS<09yF&FD#~yf~TkdUOzkG@6#mvz{n2y{KZ{)j^|<5!rAuD!F`vCukR7J`S)xeI>GHh#Y#Z6a*M8knY6#*)^T>np+}Ruq~rRMbl8F zimu%%Fj-*WeeWupTIjaz(n1J%D*X{A0ykHw!!AZvA}x{9_Y_-) z8lO2)kT}4?f2j=VPNPSgD*WU`TF}nav}X0Efs+J>xPf+SYMnF@FW@v82+Z_Vc}zQN=JD3)=MXekI~*$ zI=?}iN6w*Z*L)vJ)pxlDL$t{`5A82F zT}o#P{;&YP6}z0Cq3`3k8Wgl<0(+|HSAb+cM=q^i_Qd32Uy`>5pjKUe!zs^p*#i;_ zoLqyM{b+4-zNNqqYF(~4UNe1AZFM%{u|{ftK=9W;rh5W<#_8oAZv)wvofK0X!$dO8 zqVsZRMitlVM#*MYmP2(0R;J0RsqHOKvQs`RzA-V@fyRzV={>zR?|JNT>yqQ#(45NJ ztmG=Lpb6v+uw~`>KhTd53GeC@Ob?&#t=+qk5n@H2LX%a{>j#7=dDL1i@13^;>owP9 zodUN@04a7n@+8;hTgMbj-}e%xHQ>`YrX1^>(d-NXL1oB*#q{vo?U9~^x7|85RX~IF z{?4U6kTisa^7dpYi-tfd_{f9NAk1@+`6Eot$4tYBs2^c|~NNn+7U>V5)nxU^zLx^pirmbXX~^MP@Ol@}BnlrlR@-_mXAr5Y&7^ zjEE!S_YLz_Ez6q=O;Zuv!T6MTi z7qTzgf2sWQb+QaHe*mGwz)?^XBUQ}zybLxs^NSvIYK5DlE#BOwiCGGEqySkr$Po%%J%SLtD4ar_b8(j#TE*2w#ULyaCX< zr*BM};CKf?7G5lU>Tm801&NG=R|1L7&S9+CB*5*CL${ZRC+euS>?a{fOjxO3+=*Xk&5 zmKXL0{2W_0#Wj8qJH_b%pXsu8g<6?XI$DQ1pP20DZ{k}5JUD{e=)#*@kY zEUT{u?O|9-asQqd`{zXZ0>lbFAr*Vy( zAZN-qZL-rW9BaCpt&r|vJ$&^-iP)#%_e%1Q_eakrb8421GR#IzyT7TM`9MQz>QIAY zH~7@oL_Owp`3^Sg3HH(Ruo8mGif=e#glLx+9n#jn{ma503eFIj8&8-Zl5Vi?z{A3k ztA5CF8ZAcWCy6DrI@`CV$*1CRP4Hciv}`Nxr9b#g8s8W_VR*JmOGiq0gxBk&nxj5A zJK@aZje14DPp91M5C%*9kR*&O%|=(a_@6{xHN; zRqALX;{N#!9BfE?NDO76ostwO{`18@OmCP-r`R-kj}#Ar#b4n_3}yJDjb=Ci0(D>N-QiMb*&Dah z*wZIqXr*6vX+gYV@v@>aA{`rYyI}cl5h^KskrkRMRh3UZAWnerMM6D6qU}XsO@%TI zNS_Ibp-+bI+uW8d$WEtnW$sTl&UkZ}i`Orgh<9*BI-LcU5XozA!y#r)<`(na-@Us@ zX^a~-5!$2dgJAt@fRHA}f=eM}v%|&)rUbd`zGdcNl9$w{lFz^;aPhU1>t%~8WU>b% zH)C`CSsBOo8-J3)Bc(LbDrVAjlOaaKM^B?m>?r- z0hA%xwCnM?n6Al9jCZXaw@bZc43JlG+MTtV-&JvqY@_4i`z_WhDs+2u4cME5S^7xT zx-wP<+tTT$Qil{w7;dWa)0jDas&muuu|IO<9`4^Tt8%wW*GM(m!X^Z~1T&xaU~YT$ z=ySEY+Vl8#VRw6;FE^8L(#F1*a0Z<~HazyCLcis{B~k4!zeAYK8u+eFy(W}Geja4K z-*EXIUB%I_!(CRa%^%92`8YeNh=1C3w@MF2S2yCujFmcm1jQnw>fsYhYv~kr(-qOt zmJR4jcoprM0NW3ecAt8h`+ycAQ6C-&F-dV%Y;v2zudFs0PM-5$zygbmZF;+OFi%J&F|uOV=AZ(^5_LE2a^0su05 zo-xOacGWtZZa1*~)Dzo>g=LXzVb11o!KpLPbL2d`7MG(xN|SeQ_-irEXr~bC8JDw* z=K{|-CwvsRRb_N&Q_IK#hqCR7qJ^K%ab4BOQg)yEDczaLOY^6?Nv`+CBuhG&6=wBu zw(WogoF18a6gYPKzuEKoq54!+=v216r*7Z!My@>s0^B$VrzC$SVuQ*tN1>6|??Yb& z_PWUMsoXv=ciU6nE5Y+!9>HN!`i0ma(zz8A-P#w3OZKUSVLcCeDs+Oe*o$;uQak`Y zkXrkEKl_)--fX!9`AJO-=S?F8y-v#6lh1tZLvv-H;)~Z7Pn1sfew&xjtfq2_1i8bG z=G}hy`R7-{jG?cbl5}Ox;{1qPt_%FMJ|OZ*9kcvDWr=+WI~%+T3C)DwCdPLgb0SMa ze(!ZMh2XKG%9FN(j{`DaBU3P@LVpq0>mjRo#FV4hEVn(bAkeEcMCxNI?ei++Xz<6s2sQjRLIYZZv*{L1HSnDdHusc=(4Wh zUl0AH8~*Sg27ER9^ZJLu&lT_=`Zoh0T>iTLp9lXionN>9VLJc))_-hXKVtu${6FmP zuUo*({_FaO!G9g@uT%bq!GDeb{^xo9n)1Jx;D2gf|GRO2NgDp?{MyrBoAPf4zfSER z2LIwff6?HtS^UG`KQ*skQ~nnd{DY+?n{{ttuyuF3xUZ$#={fT{8G`d1tMpD`l- z)132*ZU4>S*USH5@QeEXVIa_(^!LvF_ig>}zxjVJ0sOs)|Ih^gfgXR|+6f8S_4ix< zVSj(!`VSH2FWUHrbN_Yg*USH5@Gs`|{|S-)zZ>^|yHWo~2m1e;jid2YC#~JHqvRb_ Q`FwrC%FeRn*yX7I3)m+Xj{pDw literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/dwindle.png b/awesome/themes/default/layouts/dwindle.png new file mode 100644 index 0000000000000000000000000000000000000000..943ece5bdda3cf316c286aabaf2b554e9fea7e3d GIT binary patch literal 967 zcmV;&133JNP)b-6OGLcB#Be%WLQsQNA z`@~l7x~V1;dr$qtIh=l@siURy3Q8sUTQGk!7V)wi88g3*u zX$mC%)mIGQh>BQM*=t1r4w(^(q`oVr2_`Ly1wtPd0T^^g-Mq}76ag4l7FzVfx*x2r z0QUJyAoM^#y$6)cD2qi7(0f41jirgmVTu4uiG>=zpa{Sr^FlR~6anaSO;u{vSTTSD z0*R_$DF*PBSfuVkF@OQT3k7bhbCo_c-r2=JvMC6g+cXrgeqpt`okqnbDDPN1K4LqAX~HcJ1PQ+yDdZ1e$D&!LqDEdDY^8)-Lc5cPdA-}oY z=AFq6&@Wo?|G$(7lzk)eZMOl#BBxvSH<=cCXuzvD)o%GKAHcZKTg!WcW~D}#$Ahwc z-3A;Mx`&cIF3OaBWYf~Q*TwCUxx6~zlte?#yvT)TRu3M!)0=T%#E1!_&#W`ESGoPr zobOQle3S(1rE}c`Y?ZalCJ*|@*vjO#n}Aa)c7Rtj)SXuHpqGFrx9?XrZ8L^fF7b93 zP&Z;u<}BF0+5%@c0ViDaz&S52?blYzo4WfJw8r)2{PJcIfX(VQFW-Lf>9n3>!BfKH-!{8!D+2H&_Gwr7IIR8spxLe~EG7)&(>)G&B%O zBtWVG(l)#VFn|P0h+U|}2wH&<43S`^iEk;~m$}oK&UEJEg4#~)ytK)^bG;|Cn0cOi z&-XrW=lsqDYAVW7sd+VZbqgvg%3`6iR3vm#kgY9W$`YYOT_jd@&n44RsmOw=(1OGb z@8ktg6^k`Ib5iSZm=Y;tOCA8B)VKEbxM5aB z-MKsfZgqM06&n;v#9q%HV10H}Q>dBU7;F^am_>;N<3#}ssHtf9xF~?L5|PlJq5yu7 zDw(&vD1Z-DBp&6l4cB9v5K8@RpcsH7$`UmtuM`1r(2Pi|;+tZo;JQVLP~`n001msa zVP4hm`9#BBc1}rT(RV!qRxSWT{t${hHk?;N(me*wC`rWj=a-UobANj&5jm8#`}F}# zNkp1H%ijHZ01lcLsk@$s``!QpZmOx6HBk(}exX#&&-u9T4e*6Ttl?5I03&`C3El3Q zCr!HMrV|ci3ozied38s7#E6PeNhlS2>V)0vPgr^Z%!n*H+wlQA#8Q#68MA(K1#{S) z4Zx5Yp=!t5-%=JzJ!mefbE<8Y)|aNGLRZ(c zjAjcEIHl~*mJoc@9uL)2G>x_C|2^3)!e?`O+@hu{LJvi#Ni^qz6Kln7o&cwn z?GOmOq^aSIL67?h@UQz}CDS$wjIJ&5<_pj;W=_?4fxz~51$H z^4$fkc57K*-YEiLvxd#f?hmh|t^FH;n00000NkvXXu0mjf6M@nt literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/fairh.png b/awesome/themes/default/layouts/fairh.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e289d6e7dc711098035859923a4aa556350ca9 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHab;j= z1TsG~WlRJ~mjw9*GdMiEkp|)S$Ssku=CXLI5gE>Fl<{iyR+DaxtN(b;^Tv) c2W7?#Q5UwKdX~4(6sU*6)78&qol`;+0FA~n^#A|> literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/fairhw.png b/awesome/themes/default/layouts/fairhw.png new file mode 100644 index 0000000000000000000000000000000000000000..514d66d06c89d5cefa080d0ae23e091b308361f4 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaozqx z_5c6>x^ekTAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;;N%h$koqs*BnK4I@N{tu(Kw&{gP)aWMh`nr4Ua=p?FGZOMYB7LZJ3LhnIk?v eNP19a%n)^9`>AJn`%Hm)7(8A5T-G@yGywqorZr#y literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/fairv.png b/awesome/themes/default/layouts/fairv.png new file mode 100644 index 0000000000000000000000000000000000000000..e5aad70fd0dee93bf5987c968eaec04632271909 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaorvf z0AwZ}6I=z7E(!7rW^j0RBMrn!@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nxdx@v7 zEBg&jE-?Y~T?g)E1BLWGT^vI+&L{uiXXTmE!_HH~!^6t+rg=JJ*>m>9a_fNv3TdP%DF{tDnm{r-UW|=^-*L literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/fairvw.png b/awesome/themes/default/layouts/fairvw.png new file mode 100644 index 0000000000000000000000000000000000000000..f97ce56b2b1554834e7e5cf7bdc3ef9ed2553a62 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaow&_ z|NsC0gx?wRAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;;N%h$(7JhS()vn!|{*$swq}RtpZ-lgPfKLZFPvMiv1F zG@`+l@rK8%|(~rp)>ulg6X0sQUMQ-X`S9%#{HpkGtcC7J;u8tnPqQ;K1|{&c*Hls>~j6` z>4iq`PCs-BGI_8sqrrX3!s)E7KZ%W&#v)(2-b=*N;o4M hJGp*tUnjrJ2TskWA0%rfHcEg3+0)g}Wt~$(696K5rDOmA literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/floatingw.png b/awesome/themes/default/layouts/floatingw.png new file mode 100644 index 0000000000000000000000000000000000000000..7ddf7ae8eab1f27c55cd9cde9f0e4037de5aefb9 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;)m42-s(E{-7? z_ugLHn9iIiar|Sukdf?6FOH?bnhS$DBR{jZ6a`1}~eib;_l$ z%lwuGbEuYB_2svRT$*sKy8Qf8sd@Kz?^%ES^>@j*^7SXCZ8+Y+SjMpAK_UaQ!~q62 zg9b*P1SDodJ=2fs)inoZG;|v=_+Inmuzb`q!O&LkJL88R3C7C%!an~_Vmxm0a-;Ry zMGU<23Orr*ayYb_FaM>wa1rl{!sjvk1*^F~{PYRsKR>G>?^IDkgz$%XoCT}cPt0QN zx71JeYY1vtl5=1|PJ{cD$2EKYx=vK$_$t$|lg**xB#*=^hI1XV+~(`wG_~@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIx8iID}*wH06u3fIpTc#qhuI*O`Sg$f|M@@m kI6g|#GAwXYedof&@Gf+rSGq>{ZJ=HTPgg&ebxsLQ01GuXdH?_b literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/fullscreenw.png b/awesome/themes/default/layouts/fullscreenw.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3cfad9c7d6bb3855d7ad9c743c217fa1814530 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaRt)< z|NmclbN*eBbV-n3FoVOh8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-Jcq zUDh($ literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/magnifier.png b/awesome/themes/default/layouts/magnifier.png new file mode 100644 index 0000000000000000000000000000000000000000..14765551c75feaa2fe8600ab10667900a10a9b94 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIxA1ctxd|Qym|v0ENswT^vI+&L{uiXXTmE!_LEVhL?xuO>_T2zM}igZ+O@g7R+J% sVkgkx%skgoSNp@yqzSAR?_8J|1Z-DvKR)ew5oiR1r>mdKI;Vst0DW{g4FCWD literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/magnifierw.png b/awesome/themes/default/layouts/magnifierw.png new file mode 100644 index 0000000000000000000000000000000000000000..97c1d11217423cf68d4642b1535fbefb7f187708 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaRt)< z|NmclbN*eBbV-n3FoVOh8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-Jcq zUDzopr0DCSvSO5S3 literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/max.png b/awesome/themes/default/layouts/max.png new file mode 100644 index 0000000000000000000000000000000000000000..fe70bef18f12c9b404f4238aac9259354817f605 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaowH) zl9r6;OaMuj1o;IsI6S+N2I3@nySp%Su*!M>Ih+L^k;M!Q+`=Ht$S`Y;1W=H@#M9T6 z{T8FRfTGkRmO0aaLd!i}978nDFTG^Q*K8oba$sxBjwhUdSnS$F%4<%??n|7~WK^=S z{WPe>v)l|cOj#dqZ{v;Y0JCvj9Q*-KKOhBkKWH8CuQ#T7ydi`i$y+_ zhb{Svs?G76JUjZ%2t{yrCza|<{<`UdaQyQ#F~99kO0!-#BwouSA_H_XgQu&X%Q~lo FCIBm%aBctq literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/maxw.png b/awesome/themes/default/layouts/maxw.png new file mode 100644 index 0000000000000000000000000000000000000000..d8debb86a9451d373591ef0afc05fb95227d560f GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaozqQ z`2YX^#) z^mS#w#V9VIz*;80KnW*&KC`%>!+dZaJn?CgNL_g$kp4qtTOMAtun_(YjLrFiXf@h1a%@7a4mOGFmyh@t&EsyerSB<;muQ&nNKc{rquK=5BxCzvI7H zxDz&wLBs+KqoVJy85}S Ib4q9e0I!&Hod5s; literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/spiral.png b/awesome/themes/default/layouts/spiral.png new file mode 100644 index 0000000000000000000000000000000000000000..a24faf563ace21e47863547e9bddc5fd353f9336 GIT binary patch literal 1506 zcmV<81s(c{P)EXO&BM5nmg#u1h63+K$$A_j!o;4 zIKrc>&Hymr2N3z*$T8lgl?kv-gU2a(0d)HS_W zG98gk@J+uM=dD(v~A>uS{a-q@hVABqZ7+6aXPi z8KiXONNw2-7eYvAt{>L{Jt+X8P;yBrD4|oVX}EO@$=eiw>AwoU%L-SJEG48&z=T-! z6`D>GdLjTm|NX281SL#~=eXldLT?11i2o)l>SEQ$0%WC5855I0FI0@+`26>?La&hb zlV3^3q$J!0<2FS)VuksnagvNl??z$52(g2JcHT*m z@<%{g<7f6W%(4MUk@DAol*F5ifb`DK0x5}}8t4>&odT~8c&lRU=2D;+p-&0r6=oO< z31MSC04ac`G}n{HJP-s+rtuft7Y}rDX(%tCZ%#pSNRxI8$$@#^W3B23CUfZ}6R{z- zCT6M+*%YE? zNY69Pl|sVn?~$A02q&w#8At)_@g9@D9J`)UMl_%VUbbXx?aA2eqo9}8$gMj9ODn~M_B{NZDpem7fg&`WR)J?1LC5c$_O+T7F-q-%W0dYiZQthmH>4p~t!#*YOq zuFOHDirG8|x!tnXB~8mqY-5^BS~EzUg}(A-bjWG=dy>Ge=*CKyvcYplw1yg zhuO^}AM+j8S&E+`BDBOJzw;HZ@fe%9O#E;BzBNxOH z3!LL1>!PBT1yClS;@kmcLBt9JgraNIX*zeE8WpxP zLf`)Zpo?zN#=Y9KB9J|7VK8*XN&w`Gc0p!1%tQ3#0&L9#C=+xb+Qc}))7(LKCcuVl zfHGC;9gEg2afC-%odGc52MBd<lF;BiV`fNmdvU-vlF(#SV+!hWaCah{M8 zG>JoxcvtsObeL>f?psx%=76_3%d4y@4j_qd(~3j~lrt+~9JVIJ9B;9~tdTwdS9~m7 z7j4%(bezx={@~N!pA~^n3Dd-L)bTo@Hv}l6znK+vG3uiNWVtRDCOUy$ zMa3|VPk(<_=n?XM@-Io4m0fVd-W?jesHJscwT*-zW-r)Kf^2=K(drS1|%omqy?mB{w$E3=!t<&0c;m|>wq^Z z#%|69dJy_5q5Opz#*|WujrjnQ0nO4}Pa5+;C|GhDf5CmxdYGGr@(1+ADM&VH(rO_o zFwc9ejr)Pg-1L$Yu_3l5ZWANnU*IWvV}QM!W+}52%caO{P%@h`=iM0|Ogo~NILVDd zWk+t&YTmZgzqlV|lTy)EmFJn}N}fsD-RhiZXjR$;%-?i7H?7 zZ*Iuhn^k#}UN@Tes=QSp;3%gUqbuAOjPMS>=ESbsn#*H~z-ZnZZdOFC$r)Z}b-Xd@ zXE$f~CntM-xo?iFly{n-+x7%!*?}V28{W&?%;jdjJTH=GtDgOGq}CPQprixzvy0PO zF8DLwH!;(vM^a5_Xi0gV7NgOQGMNwD&32$a-t8;>?OmZ0C?=1!MeJ;NZ#}RK_-&=ODLR(z>K+d5LXIb4d$Fc?Oz!bmw$P zfATJC99e7S^MVqiOmUueQWu;86b&J@LA^06w>zW-KH*M5(x?ca6n$)FAIF&0T;V^o z7;=s*%ow@OaqicVle^*pP>NpG@dyXFz_nzV@*Uf}l5uFW$W=aNM>rQ10J1M0U@vtp zGH*D;#<}cC%)glBOWtHW8cHq$;9+(%$;W)hb(W&L$hE{Gzw;HZ@fe%9Ek3M4q3C9q zvB+H$s>sDE26=%~{KSvUaU&OEi3QGaka2Fc&(h_SrXmpC3^C3#yvPy0Wg!#bH$GrX dZ1!w`{{RYPGRcBRIPd@f002ovPDHLkV1jqu#<&0g literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/tile.png b/awesome/themes/default/layouts/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..071a385f1d1c84b1efb108b0c547447f892032da GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-u0Z<#|NlU8`tEwu3HVF>yH3sBsY80av^ zRI9<6LHP&=w-4(hHa0e0E6xLN)EyHVV!DDG<~YdtE?>d)Vxn(NA_K$Q)sm-gi<^NQ Oz~JfX=d#Wzp$Pz0pD-%` literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/tilebottom.png b/awesome/themes/default/layouts/tilebottom.png new file mode 100644 index 0000000000000000000000000000000000000000..aeedbe23034788bf0502779da1764a7ebd518eea GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIx7$`MG#m=f7kU019b(x;TbtoKOD2&&o5Shn`sf4Mu)0K7pH(TP;B90(?STf%JbcD6UwV4CFAC1o;IsFqBO` z3sSJG28|7OqncwH=G-yxm}6&fkDcL?nyl4Tl{izNDGZ*jelF{r5}E)9bvUX3 literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/tileleft.png b/awesome/themes/default/layouts/tileleft.png new file mode 100644 index 0000000000000000000000000000000000000000..ab55e087479efb9254f0efabc7720acc3a4eb123 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-u0Z<#|NlU8`tEwu3HVF>yH9Wk$(OgHkB@Q@b zhcNguhy|%|tVu{nU@AJq=D{Gh{RlVDmdhtOo?I;H(rPgF>D1?8*cqnwWxuBCLZDd; Mp00i_>zopr0Gs+QHvj+t literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/tileleftw.png b/awesome/themes/default/layouts/tileleftw.png new file mode 100644 index 0000000000000000000000000000000000000000..c18e7b43fc1df32d0a58bd71e81e9973e5bf1cfb GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;*FUb3f)V@Srm zw>KAZF(~k`9{Bs;KU;9J#tVldvk!jY5f?M-DcZ@j;QnJ{|7f{rR*)$`Fu_8QQH4RQ z-_0|RAIP1@jRF%}28J29*~C-V}>VGHmHaRt&q zurz(=c_77D666=m;PC858ivL>4nJa0`PlBg3pY5H=O z_8W}+T)gJtcEJ;XLYkf~jv*T7lYj8D^33RA=c(c0VdZ)AC4omMUEsMK+cP${4UZ-s dIv^{>P_SynnunQ7a)6o`JYD@<);T3K0RSpqFw+14 literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/tiletopw.png b/awesome/themes/default/layouts/tiletopw.png new file mode 100644 index 0000000000000000000000000000000000000000..daf965faaaaddca59ffeca4ba2a98c1b1951c95e GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSjKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sf4Mu)00UpW7Yb!wN0(?STf%JbcD6UwV4CFAC1o;IsFqBO` zYXRgjCV9KNFm$lWdH^|=o-U3d7QM+4t!xq;+-rDPn?!jW7O*B|@}@REd|zuYkyWij uKtb8&fSHj&fvH2r+Q3FdZHKBi%nXb7ih8`2d0_)Igu&C*&t;ucLK6VF)i@9U literal 0 HcmV?d00001 diff --git a/awesome/themes/default/layouts/tilew.png b/awesome/themes/default/layouts/tilew.png new file mode 100644 index 0000000000000000000000000000000000000000..c722a358e0618163bbe1a936093d327ce2594d8c GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;*FUZSUqV@Srm zw>J-RF$nN5T=@InKX}q?*?{7T;(~}TT&6DCeGD`12ClIz(>>1&G6V>0n5TrhFeJNv z|5;-KG~CAW6oZ)}kYVWH`(mLGM9l+!ho?`kJpUS6QgnQ=h}(~E0w8fuS3j3^P6P000>X1^@s6#OZ}&00004b3#c}2nYxW zd2z8Hj+`L9UQg2LG>t}MEh2;Ea(U|nQA(kdBAd<9YPAv(`2en+Ap7$9 zJe^KwE+TKhr4wXdu~;OEA~PC|UVw8a$i8y9{L}CE<2a6=fKw-kQVQSqsaC6BA~H^r zQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K5~rW#b#FTbqDFk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwVxBIJAr_~TfA}*P^a!vnP7vu~;$dKz X$MK&rzAi=usDi=M)z4*}Q$iB}5zjAs literal 0 HcmV?d00001 diff --git a/awesome/themes/default/taglist/squarew.png b/awesome/themes/default/taglist/squarew.png new file mode 100644 index 0000000000000000000000000000000000000000..913f2ca6ba168e824644509d6fed72b31c677d49 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!3HGtKUiJ>QjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K5~rW$n|Rx>tZgk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwGM+AuAr_~TfA}*PG;qo!WN03EeKyd5 d%Z(A}pyPS@6O*PM?E$J|@O1TaS?83{1OQ#WGiU$+ literal 0 HcmV?d00001 diff --git a/awesome/themes/default/tasklist/floating.png b/awesome/themes/default/tasklist/floating.png new file mode 100644 index 0000000000000000000000000000000000000000..f29e7f5a9a88b2792344da49b01b69d947002ee4 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RTTHmlEFw9?wpokYtH#M2T~LZfo z*92^Mer#4?rRwc>IUX9fi*!GyTvy>Vwu-CSxnbQ4_sH9e1***6{uVjZJgtzqwEbP{ z1#zbxr3qo@=FB_OE^se(Ug(o6F_z`8Zp;pMKR4&aEHeW&Q`OMRMJux-udd=;DY*Yl k#Fiy5<3D>`d0N99QfGYPmE_VDKtC{ey85}Sb4q9e0NKlaX8-^I literal 0 HcmV?d00001 diff --git a/awesome/themes/default/tasklist/floatingw.png b/awesome/themes/default/tasklist/floatingw.png new file mode 100644 index 0000000000000000000000000000000000000000..eb802aeebfd3632131a4f00e3fa2e934d5306c54 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RTTHmmFv8?4?(MLXst}5hc#~xw)x%B@E6*sfi`2DGKG8 zB^e6tp1uL$jeH=JnUcKST^JZv^(q?yd22mg977}|OAi`qw=goWJ@_t>60~WSh}hwi zS^Mh`6inP?AhB+<=k`r^7wiyimQOU5I6w_xk2}(ah#ma(7lPOE}mUT5V=(TeUgS_w=T=nLS0%9K4nPZ(N%cW2?IV X(dwl}PXAwnyusk<>gTe~DWM4fUetK} literal 0 HcmV?d00001 diff --git a/awesome/themes/default/theme.lua b/awesome/themes/default/theme.lua new file mode 100644 index 0000000..69760f6 --- /dev/null +++ b/awesome/themes/default/theme.lua @@ -0,0 +1,96 @@ +--------------------------- +-- Default awesome theme -- +--------------------------- + +theme = {} + +theme.font = "sans 8" + +theme.bg_normal = "#222222" +theme.bg_focus = "#535d6c" +theme.bg_urgent = "#ff0000" +theme.bg_minimize = "#444444" + +theme.fg_normal = "#aaaaaa" +theme.fg_focus = "#ffffff" +theme.fg_urgent = "#ffffff" +theme.fg_minimize = "#ffffff" + +theme.border_width = "1" +theme.border_normal = "#000000" +theme.border_focus = "#535d6c" +theme.border_marked = "#91231c" + +-- There are other variable sets +-- overriding the default one when +-- defined, the sets are: +-- [taglist|tasklist]_[bg|fg]_[focus|urgent] +-- titlebar_[bg|fg]_[normal|focus] +-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color] +-- mouse_finder_[color|timeout|animate_timeout|radius|factor] +-- Example: +--theme.taglist_bg_focus = "#ff0000" + +-- Display the taglist squares +theme.taglist_squares_sel = "/usr/share/awesome/themes/default/taglist/squarefw.png" +theme.taglist_squares_unsel = "/usr/share/awesome/themes/default/taglist/squarew.png" + +theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png" + +-- Variables set for theming the menu: +-- menu_[bg|fg]_[normal|focus] +-- menu_[border_color|border_width] +theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png" +theme.menu_height = "15" +theme.menu_width = "100" + +-- You can add as many variables as +-- you wish and access them by using +-- beautiful.variable in your rc.lua +--theme.bg_widget = "#cc0000" + +-- Define the image to load +theme.titlebar_close_button_normal = "/usr/share/awesome/themes/default/titlebar/close_normal.png" +theme.titlebar_close_button_focus = "/usr/share/awesome/themes/default/titlebar/close_focus.png" + +theme.titlebar_ontop_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = "/usr/share/awesome/themes/default/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = "/usr/share/awesome/themes/default/titlebar/ontop_focus_active.png" + +theme.titlebar_sticky_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = "/usr/share/awesome/themes/default/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = "/usr/share/awesome/themes/default/titlebar/sticky_focus_active.png" + +theme.titlebar_floating_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = "/usr/share/awesome/themes/default/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = "/usr/share/awesome/themes/default/titlebar/floating_focus_active.png" + +theme.titlebar_maximized_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = "/usr/share/awesome/themes/default/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = "/usr/share/awesome/themes/default/titlebar/maximized_focus_active.png" + +-- You can use your own command to set your wallpaper +theme.wallpaper_cmd = { "wallman-awesome" } --{ "awsetbg /usr/share/awesome/themes/default/background.png" } + +-- You can use your own layout icons like this: +theme.layout_fairh = "/usr/share/awesome/themes/default/layouts/fairhw.png" +theme.layout_fairv = "/usr/share/awesome/themes/default/layouts/fairvw.png" +theme.layout_floating = "/usr/share/awesome/themes/default/layouts/floatingw.png" +theme.layout_magnifier = "/usr/share/awesome/themes/default/layouts/magnifierw.png" +theme.layout_max = "/usr/share/awesome/themes/default/layouts/maxw.png" +theme.layout_fullscreen = "/usr/share/awesome/themes/default/layouts/fullscreenw.png" +theme.layout_tilebottom = "/usr/share/awesome/themes/default/layouts/tilebottomw.png" +theme.layout_tileleft = "/usr/share/awesome/themes/default/layouts/tileleftw.png" +theme.layout_tile = "/usr/share/awesome/themes/default/layouts/tilew.png" +theme.layout_tiletop = "/usr/share/awesome/themes/default/layouts/tiletopw.png" +theme.layout_spiral = "/usr/share/awesome/themes/default/layouts/spiralw.png" +theme.layout_dwindle = "/usr/share/awesome/themes/default/layouts/dwindlew.png" + +theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png" + +return theme +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 diff --git a/awesome/themes/default/titlebar/close_focus.png b/awesome/themes/default/titlebar/close_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b795849aad35f26a0386aee245f2b49a8d675c GIT binary patch literal 666 zcmV;L0%iS)P)LrSVSRJ3Y*v{1S}*~AOunfA~uR$#KKgm zQl+x8(DP3cmMDrSh=>F?>U~BroV~U;8EJ0L@vbSw1Yjf3OOVfkWu}!y){gzJxEQ z#eB{u!$W9kq!T|cXRvfY{Kb7`_y#x%)rA>oaTaR-cz1FUa4l#u$Ueu$XDZ{suI0-FQ!V`dmLv%rpv(fj6W70W>-Ia=N+M0K*(bI_%5$#+MB5>)f^PaeAU5D)RPfk|o5sPUgnyAW`W&{YCVcs+y=k>&YSNc?5!UxQ(v}~eF>lY=8oj4VFLpX#x07ORE!{{KIIz0%SU-l5rj!jz}r#iLmgbK_5Hl-DuV$gdKulb8Ga_VfJ< z9ABJY$6jP%e$%JA-|F|J&|v;|P6AG*56*wo=im{Z?B~Bln`eV@Q#MQO|C=jLojL1Z z%3$A;bwm6uCv(nyuMg_peX~y7$#gn@PW#RO4y#3_7FXB$XSX&TFj@FRu%(Hiu>avk z>sYgGA<2Fpl|S%Crfz%?;l;8yuT)NHxA?7yznedErHeC$@cwYJW9{Z*eNlSr<1(3Y z=hv-52?sZZ*s-!ODNb4Uz=4DDy{+u6wenmQYyyt@S|M=_+71g?-b{Rut-_piU8$69 z<_dGerxJVqPS_CQ%$U}=TqRR;lFd#t2OSoU=|Z0O?P}Gh2<~B4)Y*FdjS$DIqCKW9 zMhl)7YlbVmy!GenXU01cCAvZ1CjF_(7TCsnB8{tcLH7EP@GW&+p5`y2mfVY)^gKm- z>$+vU(pwYx_s!~hAd(sHd(Bt(@_)YFS2|n||C$U;iK->85hW>!C8<`)MX5lF!N|bS zK-a)n*U&V?$iT|b*vimU+rZGuz~H2&IwOjP-29Zxv`V-J1EUZ_b1PF5D+8#8*lEvm yff^)1HU#IVm6RtIr7}3CRBe|4 literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/floating_focus_active.png b/awesome/themes/default/titlebar/floating_focus_active.png new file mode 100644 index 0000000000000000000000000000000000000000..3447bb2e797aa7aaa0d801ca1177a1ea231a0484 GIT binary patch literal 598 zcmV-c0;&CpP)GY`6#5dKYoA>zk-ApQ@;_ZcF76#y~Z ziy$@-H-OZ**FFAUzWhHNmn{DEUnuz-NS_0y!J(hlGlYHl544~FZ)AWR5ccJ~YTnoX zp%eeZv0=r}|3LBimi)Ic!7 zWE1?#fFbC`f3UBh;Vz%||G#Y`0s|uvE(f&aKT!R9f(C;P4}6vYGF-j*|9|s3+*mvl zXhFb}_dxXqL>UY=-2XuWL%^f|iuwQl>sMf6;WVJ3e)rx3)fr%95Q2vL-bw&!{x6yJ zAMAP<=1v3}>T}~gP~HG*&LhfjpBq5K?|@whay>YFeQtoT1I{c>s^Q?Y4>2?WZ&^X2 k;q!4B3YH%&=xJ^+0CnFED5!2~q5uE@07*qoM6N<$f?snX`2YX_ literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/floating_focus_inactive.png b/awesome/themes/default/titlebar/floating_focus_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..f69af15a93257e95abd31ddb8fe8f2dd2220d0ca GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H0wnYHF4+L2n3BBRT^JZv^(q?yd7K3vk;M!Q z+=3v?Sf3I<5hPev;Fu1i!Fn0)9DNzVz`&T{>EaloasKM%yVb zL2;v?$d#*y{7#59H9d&B^-{EB`UBO7sH5k?vL`O_nCMh!b?}&u#DAs20OyW(=b}_t zdIh&^_^_I7AA6d`96>?*`8V|6$R};QW4CP1ku)3Us#)x(6kc0juZ}HTue)iR`FWkg zYmaiWo=e>lrCs`9iEejf!lHI}}*rI;R+3ll+tW#Qh$J z=A;ahS$1p}Y&7raOSJI(b=U8_cxV=vIoI_Gu?9y{9%!Fea`QN0Th3*!w@{nSneE@^ z=?4}#iB4Oi)bKMlbIo41?KkDJHY9E>{wpeC{7$ z1gMs{MwFx^mZVxG7o`Fz1|tJQ16>1ST|?6lBLgc#V=F^bZ39Cq1A~*A>WnBFa`RI% k(<iN$WeaiCOU+1%UJ9Th9U*nM-)WD*?g4OBm zN0nWHhtGTxWjJg+v&ZlF7w6`5zonrnw^liSzQ~?iTyi(}NmlX_ori`0Mf~F>Yv%3C zd|()`U(T4HCEY2L_r;rC#%s#9+*gp`kh$?{v-sgXGP`mgessw>w#N40%m-82mXw&8 z?+vZpboNb>?z1c&hWgNH*M6wal6rmdoa^aH?QHIq_Jy^MIi_F28#>po^f;yL!0Pj% zmLbjc-zLrpD}PBa={af^{(ICTmGAjR#k#EVNrIsI@-N*rr=2W!R6ezvB*gl(S7VFc zyX#eI2J4zGOWG)Bi%T7{{&#e}<+W#AyEJ0F|H{2TtbMKVQ;bNyb>wsk)UF+5szy6b)~=#4#|2Cw)DG9%ijmgR`-&%S~v67tl0_0 zvN@|Sg-t&YC%5@SSM8!Ji8577TW_y@JZt5l>4rtp0h`KmlUe7y>0k|;U$C3kVo?~! zdiUd}m%mvW$fahXdgD~nb}J?Wg+24;GFoin;H)aO(SBMZy>!A|mSPqK)fc+6AMX#^ zKEGh@pC9@etqPw1>n9|$|7TD?{1S zT|?6lBLgc#V=F^bZ39Cq1A~*A>WnBFa`RI%(<@DM+xaz%d<2gY`1pIr=h!fq^mJ)5S4Fg#au)Twjw8R?3GE{=jaM-F*y3}`WN+qpw=Q@UQ>Bx~+|1y2@TojaLg z&l)A$Bn3Zzp8l)#ud~jxUH2=mYt68n!y31uF(>Z+ecmINw`nZfYibtZC8XN7;>3?1 zkzXHZPG1{ZJ=w?qX02Z7p4YGSD-MZ9Z!Y7S&z4|#Tq)S|*OYdzuM4`vb2c{jK5E+( z^1wqll>Kjg?#hd@~--n-cVWK*xs<=Pv=<;{co>6 zWiP*3BfT!`XwO_$AFDjG`{uh^c75E|%4pHU^udEALn*iC>x1tGYnAdR6<#`WTq72Npp zFq$VfbJc~{3m&YQ+4By>vC^HsIjwx|5&Jz;_@_^3w?E-$xD*)fswJ)wB`Jv|saDBF zsX&Us$iUD**T7iU&@{xzz{=3r%E&<5z|hLTKy)6zD~g8P{FKbJO57S!4sZVn)WG2B L>gTe~DWM4f@66a3 literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/maximized_focus_active.png b/awesome/themes/default/titlebar/maximized_focus_active.png new file mode 100644 index 0000000000000000000000000000000000000000..78a291453222dd16bf5358a1c3b607cbcf848df5 GIT binary patch literal 1013 zcmV_YnDIDh0x1W|)H}iJ{J*W}9s;s3yy z=aCWy28QYB>BnZf#ZW_)I{9JRSB7y(L_aC?tU|w1sP(O62J6e|tFPc@!&%Jc-??o( z$_?EU7(}e+)pz$qDn+y^`mw1}s9Bw~uWx|v?ps(aU09pyXl?zOj;%?2p-ON@B<`N* z36Zk8s33kwj^~eeR%6dvgDr18HjN*H?=E5}CxM||s}N|}OoW{)@8a39u;l^V zT7Q~Dgv$%2(f?*Bz3XSOTcLZrp?T`1ig9dmMQBQlfcK-hlMzA9oM~Ko*oR@Q5AKW* z%=sJ0o$Od;i4;|@Q0UGlacz&~WVk<{M+f3cyC2eLsk&!kK9s|b$-q}PN$}peVyt?6 z9?slV9GE+U<1xXwGNWLdDpj#&w4s)QG_ocNn>L8PofzDbDn-`9g^ctXao)JX{>Ne|jC_ci#3;Jojwdg`7mGIP z-)U(}Su{S}_=>D*+a3r#M_{mq?#APMxkU@k>y#}P@`I*36mr_K@liD`%W!7KkRRaV z*^BdjTdk9#p2`K#yBGRTj^a35a9u6nyLEC}0g;~5SvD`nxg%cHJ#c)~v+7p^rv#dD(b_fYZhg%cI#svrX)2lUOA5d3n}cz! zn8u8t-qTF=)J|v;F1#rE?o%PSn`hEnDO@iW8s88uCQF%0@EBM-Vbrq>FNouuMocP3 jm7*Gr=u{%7`h)!&401`p9ZAH400000NkvXXu0mjfjHK)| literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/maximized_focus_inactive.png b/awesome/themes/default/titlebar/maximized_focus_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..62f81964d2efcfbaad8108f6cc4df4794a811c55 GIT binary patch literal 793 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H0wnYHF4+L2SkfJR9T^zbpD<_bdI{t+C3(BM zF#P+_@kbNL<1FxqEC$jZVC;4>+YTgHR^XTpq`_t}+&TI(0;o;U)5S4F<9zF--Pyv7 zG6z1sSDn6Wnc2LsmkKi$Y&**S#qTJ))*aV{&HcAlW?SvxND8TW_^4jMYR3+h4kg!( zf$Yacyb3o=xx8>8OOj65YSnK+x1Z?kjFCxN>6!hbrE|j#>44wS^$>uFVY-y23|2q4<{XVUeS>!TP ze$5A=?1&pPb$t{-fjV^G)W?h{#bqFXG=jY1wOrcT%~S(tdpqWC)X5_n-ZKXNA3O0JF=@Qw*vuS|S>GE%~nH?(4m{G_78!`1j<`5SbC( zpTFX^(sY5DPdV~`I^8i4*3;7Ya7*E0!`y$h4QJ!>CM{GC4EdoDly<~m>y~>B+Mncd za&mMgS**VlxuNpVp8#9dk6llKqc^VHaDqkiZ=%ct)@K1$7Y&RS30od1fA-U}t!B<^ zhLp1lOKSc;=9(_vs>5bA-_z#QC6hX4|Jw)F)$`BN1*R0$64!{5l*E!$tK_0oAjM#0 zU}&IgV61Cs8e(K%WoT?=XsT^sXk}nVR732v z=ea-)k{}y`^V3So6N^$A98>a>QWZRN6Vp?JQWH}u3s0un02MKKy85}Sb4q9e0HRGq AmjD0& literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/maximized_normal_active.png b/awesome/themes/default/titlebar/maximized_normal_active.png new file mode 100644 index 0000000000000000000000000000000000000000..05c4e373df87203d30fc94025637f0f477d2cf0a GIT binary patch literal 1208 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmT$6^TbY*8=%$N#5=* z4F5pzwZxSspa^GyM`SUO_5fqIli7A4!LkC!bRZ2jkKxYImk|sM%xgSd978Nluf6Q; z6O$@(;N$<=Gn3P;MV2{NEKzlk-nceI(6lfqw^l{RCp)Rf#7=0}3nsH^8Pf8cc_zmq z#BXIN#d=8R1edP3m8HS08!E}tj2=``@3= z`ONu;U$8}L_JQ28nKFSbTev>eGwwd9cTg{V-vjNuJ<`kn3m#d-%k#eG)wPHI2j{i5 zb@7(@pX~PKU_JWa-0_gKnZ|h^kIHsu#I8KPJDf%F@`J+6{R_u0m3-{&wx|nmCWX68B z*d}>){(${|4lvypURqXm{f5V}(p%N0cg!ksge^9!uwBo8+0ChC$89@po+ ziSjXX_-iY-JHNcvuCrp+b$ykS#T;+$YE9CO*znnL#yO|O?{}@%jGJvyEMB&rx1Uu* zvXePpJ7td2?{~!$=c*ol*4xl3F#Awc>htwYySD`^TO3iJpI?2#{iWJG>!0eDd7a{A zYZcddYLtmfSRFaEz$N^*clZPUZGrFazFGCXye8rMyUesd-@A9n_?`On#^=a_rS6G8 zHnDZG97*$R(Yq`0?oN~bb?qxxwwWdtFQ36v=lpdVSD)YaBExALXkTvNuyzZR?N%J1!iK^ z64!{5l*E!$tK_0oAjM#0U}&IgV61Cs8e(K%WoT?=XsT^sXk}nVR732v=O7y-K{f>ErbP0l+XkKmI(a) literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/maximized_normal_inactive.png b/awesome/themes/default/titlebar/maximized_normal_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbc96a7404b5046c46d8fd34c724ce60df477c3 GIT binary patch literal 780 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 XH8G{K@MNkDP!WTttDnm{r-UW|Yh9Ff literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/ontop_normal_inactive.png b/awesome/themes/default/titlebar/ontop_normal_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..d122d113a09e4f78f8dc272cfd2e4999ebcb11aa GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H0wnYHF4+L2SkfJR9T^xhD-w@*t_AX$lDyqr z7#LRdDjNZLoCO|{#X#BvjNMLV+kphj3LMjcG}tVLJ4ateFfcHl@N{tu(Kz2b>3p`Z zqsVdl*T*uOb+W#1$>i90YM#^vu8C_!iax9m_n-Ggts>B6Pvr}Hm5!s)8>5fPH*z_( zWG$59Ra>#d!%QX3*!cCr+a;TMP2SIawwFJD-{;z7BSpE;bt3n#_h0ju(X|!175dKB zP}E2ByiH)HR>W?(@QLq4J~Ss?)7s#0ZC9|3SfAMR3mT_Z98G@kd)my;3=s#<+}(6+ zw`9atCGXCKYbW$=5qs2j($X$=zvPK&PTNCQG=Du1v6s78;yt&^82_&l-SwzBQwEw|qX z7FulkC4TWMw~=3pHNY1Op>jwZt`|BqgyV)hf9t6-Y4{85kPq8W`&unuZt|SQ#2y85w9B7+M(^ zh|c48MbVI(pOTqYiCaU;;q5C#5QQ<|d}62BjvZR2H60 RwE-$(@O1TaS?83{1OPFx95Da@ literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/sticky_focus_active.png b/awesome/themes/default/titlebar/sticky_focus_active.png new file mode 100644 index 0000000000000000000000000000000000000000..1106399d777ad671051f94a7f15f0e1addfacb78 GIT binary patch literal 833 zcmV-H1HSx;P)f@kD}&@elCK z!KfEO!9>j-jI!Bv$U<28F;v)`0CQ>uJ@_$d*AA(M1^mW)? zd1K{LGiuak_oZ2Czx(am4@RGi2hYpZl*C(yj-5Mq;`}>SECz#}SvW2LD|3NE73nNb zu~>{0U^M|ZqDE6XnE`ix*Fh6DO6R5*=;7*|7VYp$uRC zaq<4faD8V&QJ@3@z(Zv#_(H$kJ@L`Ihu>SY-ePlu^%mz{QNAU!>7LtQFkIWY#(KQo zk!9&f2%QbC{7(b)9fEzLVHTsh)!^^CV*N{*Os7zWgabp6ffD7nxHuhPbJq3Bo zt{Zb>G+^W52EX6^m3#Icq6HNyCZe7|C&2x1Jm_C;U43-192%bo@O2d)&#E3`OqS8o5v3&R!gXQ-SWSX84@oMx9(-utsCe9@k#p1_e{DLDQt zc;!}Q)q7c!z(b&rV0vDl9;nY$+1PBKZCwZss*k5*G>AA*JwUBi=h4m4H`h-OKAh{% z3vxAmZbmJ-afiitiF(*zGuoVgx={?Udf1?!^ywviI<*e1sKtYDyHYBOmxy-Urd#XM zOZvQ0f0gCtYs6u#GQVP=5jJT>Ef%VabZZ^@^+WWM9?EWhVek;S00000 LNkvXXu0mjfSX_`J literal 0 HcmV?d00001 diff --git a/awesome/themes/default/titlebar/sticky_focus_inactive.png b/awesome/themes/default/titlebar/sticky_focus_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..83a030ac491d460f5eeccb113918a8f08e1826b8 GIT binary patch literal 611 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H0wnYHF4+L2n3BBRT^Rm-==h@v2>S z4={E+nQaFWEGuwK2hw1@40n#cj9_43%=UC~4AD5>I%&T?OQ67U`~2^z@2B0~Eo?Qn z!%bD_KhxHL4mZt3p&Bj=r>_Xf>Wx}@Em%<~)`zG_?vuB?B?lb<} zqMWUL`10|u250}SxZHYpc24NCh+}2b(|Ep}|2}hdL+#29e;$5y+A0vWeAj}5lcqv`-3TOK+atXkhW&;2gi3wC#^4FaOCpC=~2@dvfE`lZwr5 zpt#XDfh4F z*}6+dIX~>%?o#)W`}f&UhWU<8j}|u{?c!eM@2n(srDFZRQoa=zm$^=!aASQ7qtdJ` znHLpauwUntR9NIYdqKf;rx!gc3*0>t*I;7bhncr0V4t VrO$q6BL!5%;OXk;vd$@?2>^Iw`pW(yTGRa$o@5wn%&L`%Mdl(;a7O`{kSr$6&JkZLq#HEATWuIl7`a#F8Yo2fJ z{=9tk@@1KA*K-u)RCd3*Amw}g`u;rRy8>?4|i==hA1@G>X>Rlme;mf{C zdz7Tam-$-Is(}*QPFW*xsaYCF9kCV+vc| z@g!V#P@H<*y8U{G(1y7&A)g|Pa$i4Fzs_E`%tt%o`mSkgm(5!C#ua>Bn|;wfVZYYd zx4XB$Uc6t8t$`t+F4xiand6R~|IY26A9wRr_Uenv+@gCoKDvB8q_lH^psJki9s3>U zFJ4k9d_QplgWv>)T6V(^b8m4JHfs4cM);QFZjpLe%r>3_b=hoH#V%Jw|Hx9kHXTtFnM_-*g zu0BXD;d~*%=OGA9ucng;PngQTDJ@Qv%F=#{oOq!|Kh$= z%E!(h7n%HN|8^d31ODfx1y2u3+_`s8`QPW?)C(<2q7Q%O%2-kVz& z`?n$~C;hulN%#%^NGYBODV>Q&I3NFWydZkpR{IYF_u~mRrz1{=TTEX&LEX|drljxe zx!~v1mT?}=IgwR2ulw}toHcm@M?c;?kSH@rg|l*2v0{8`?NeW~aDCzSi;@TUu5&Xz z(olN4oM*CP_D!jL{rE#>cbRwYJ|?<<=H0ZPAAYLjZ94uc^_$U+v+l3@e%`aaRrkp| z{KfsF;q6ruSK8$O)3|DhYeY#(Vo9o1a#1RfVlXl=G|)9L)-^N@F*2|+G`2D{)iyA+ zGB7x)sm_R^AvZrIGp!P?!N4fQ(A>(@#L57wA$HpHT%ZO?kPX54X(i=}MX3zs<>h*r fdD+Fui3O>8`9_ zr*B{FHKl!{oPJ)ZPvP`m`tR-I?bpoWI^Dhf_GYo}!w)xP@5ydxRydkiSRo_3GAw&T zdPv5j!Vq0MuH8YqC9eg(yzzK`P}!2DX^r8|X4B2$jwc0%$|P+$}k^@*;}w7mCb zNbdd5bhqN<7{iksESu-@jQt(e+PEEJRkb z&tG+Q|E-V}i>3Nzfnr9r#5JNMC9x#cD!C{XNHG{07#ipr80#9Eh8P)G85&y|8E6|A zS{WFK&f|AQ(U6;;l9^VCTSLm>?LUDUBtbR==ckpFCl;kLl$V$5W#(lUCnpx9>g5-u U&wghk1ysb~>FVdQ&MBb@08f$hA^-pY literal 0 HcmV?d00001 diff --git a/install.sh b/install.sh index 18a2ba4..b7da86b 100755 --- a/install.sh +++ b/install.sh @@ -13,7 +13,7 @@ if [ -d $HOME/.emacs.d ]; then mv $HOME/.emacs.d $HOME/.emacs.d_backup fi echo "Linking $INSTALL_BASEDIR/.emacs to $HOME/.emacs" -ln -sf $INSTALL_BASEDIR/.emacs.d $HOME/ +ln -sf $INSTALL_BASEDIR/.emacs.d $HOME/.emacs.d # XDEFAULTS echo "Linking $INSTALL_BASEDIR/.Xdefaults to $HOME/.Xdefaults" @@ -25,4 +25,16 @@ ln -sf $INSTALL_BASEDIR/.Xmodmap $HOME/.Xmodmap # conkeror echo "Linking $INSTALL_BASEDIR/.conkerorrc to $HOME/.conkerorrc" -ln -sf $INSTALL_BASEDIR/.conkerorrc $HOME/.conkerorrc \ No newline at end of file +ln -sf $INSTALL_BASEDIR/.conkerorrc $HOME/.conkerorrc + +echo "Linking #INSTALL_BASEDIR/awesome to $HOME/.config/awesome" +if [ -d $HOME/.config/awesome ]; then + if [ -d $HOME/.config/awesome_backup ]; then + echo "Removing old $HOME/.config/awesome_backup" + rm -rf $HOME/.config/awesome_backup + fi + echo "Moving old $HOME/.config/awesome" + mv $HOME/.config/awesome $HOME/.config/awesome_backup +fi +echo "Linking $INSTALL_BASEDIR/awesome to $HOME/.config/awesome" +ln -sf $INSTALL_BASEDIR/awesome $HOME/.config/awesome \ No newline at end of file From 827078933d5ebd12d711fe3240aca28b6a0e4086 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Thu, 15 Jul 2010 20:54:02 +0200 Subject: [PATCH 13/24] accidentally added a symlink to my awesome rc --- awesome/rc.lua | 396 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 395 insertions(+), 1 deletion(-) mode change 120000 => 100644 awesome/rc.lua diff --git a/awesome/rc.lua b/awesome/rc.lua deleted file mode 120000 index 40c842a..0000000 --- a/awesome/rc.lua +++ /dev/null @@ -1 +0,0 @@ -/home/slash/prj/awesomerc/rc.lua \ No newline at end of file diff --git a/awesome/rc.lua b/awesome/rc.lua new file mode 100644 index 0000000..3f5e79f --- /dev/null +++ b/awesome/rc.lua @@ -0,0 +1,395 @@ +-- Standard awesome library +require("awful") +require("awful.autofocus") +require("awful.rules") +-- Theme handling library +require("beautiful") +-- Notification library +require("naughty") + +-- {{{ Variable definitions +-- Themes define colours, icons, and wallpapers +beautiful.init(".config/awesome/themes/default/theme.lua") + +-- This is used later as the default terminal and editor to run. +terminal = "urxvt" +editor = "emacs" +editor_cmd = editor + +-- Default modkey. +-- Usually, Mod4 is the key with a logo between Control and Alt. +-- If you do not like this or do not have such a key, +-- I suggest you to remap Mod4 to another key using xmodmap or other tools. +-- However, you can use another modifier like Mod1, but it may interact with others. +modkey = "Mod4" + +-- Table of layouts to cover with awful.layout.inc, order matters. +layouts = +{ + awful.layout.suit.tile, + awful.layout.suit.tile.left, + awful.layout.suit.tile.bottom, + awful.layout.suit.tile.top, + awful.layout.suit.fair, + awful.layout.suit.fair.horizontal, + awful.layout.suit.spiral, + awful.layout.suit.spiral.dwindle, + awful.layout.suit.max, + awful.layout.suit.max.fullscreen, + awful.layout.suit.magnifier, + awful.layout.suit.floating +} +-- }}} + +-- {{{ Tags +-- Define a tag table which hold all screen tags. +tags = {} +for s = 1, screen.count() do + -- Each screen has its own tag table. + tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1]) +end +-- }}} + +-- {{{ Menu +-- Create a laucher widget and a main menu +myawesomemenu = { + { "manual", terminal .. " -e man awesome" }, + { "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" }, + { "restart", awesome.restart }, + { "quit", awesome.quit } +} + +mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, + { "open terminal", terminal } + } + }) + +mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon), + menu = mymainmenu }) +-- }}} + +-- {{{ Wibox +-- Create a textclock widget +mytextclock = awful.widget.textclock({ align = "right" }) + +-- Create a systray +mysystray = widget({ type = "systray" }) + +-- Create a wibox for each screen and add it +mywibox = {} +mypromptbox = {} +mylayoutbox = {} +mytaglist = {} +mytaglist.buttons = awful.util.table.join( + awful.button({ }, 1, awful.tag.viewonly), + awful.button({ modkey }, 1, awful.client.movetotag), + awful.button({ }, 3, awful.tag.viewtoggle), + awful.button({ modkey }, 3, awful.client.toggletag), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) + ) +mytasklist = {} +mytasklist.buttons = awful.util.table.join( + awful.button({ }, 1, function (c) + if not c:isvisible() then + awful.tag.viewonly(c:tags()[1]) + end + client.focus = c + c:raise() + end), + awful.button({ }, 3, function () + if instance then + instance:hide() + instance = nil + else + instance = awful.menu.clients({ width=250 }) + end + end), + awful.button({ }, 4, function () + awful.client.focus.byidx(1) + if client.focus then client.focus:raise() end + end), + awful.button({ }, 5, function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end)) +-- Create a previous button +myprevbutton = widget({ type = "textbox" }) +myprevbutton.text = " << " +myprevbutton:buttons(awful.util.table.join( + awful.button({ }, 1, + function () + awful.util.spawn("xmms2 prev") + end) + )) +-- Create a play button +playing = false +myplaybutton = widget({ type = "textbox" }) +myplaybutton.text = " > " +myplaybutton:buttons(awful.util.table.join( + awful.button({ }, 1, + function () + awful.util.spawn("xmms2 toggleplay") + if playing then playing = false else playing = true end + if playing then + myplaybutton.text = " || " + else + myplaybutton.text = " > " + end + end) + )) +-- Create a stop button +mystopbutton = widget({ type = "textbox" }) +mystopbutton.text = " [ ] " +mystopbutton:buttons(awful.util.table.join( + awful.button({ }, 1, + function () + if playing then + playing = false + myplaybutton.text = " > " + end + awful.util.spawn("xmms2 stop") + end) + )) +-- Create a next button +mynextbutton = widget({ type = "textbox" }) +mynextbutton.text = " >> " +mynextbutton:buttons(awful.util.table.join( + awful.button({ }, 1, + function () + awful.util.spawn("xmms2 next") + end) + )) + +for s = 1, screen.count() do + -- Create a promptbox for each screen + mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright }) + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + mylayoutbox[s] = awful.widget.layoutbox(s) + mylayoutbox[s]:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), + awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) + -- Create a taglist widget + mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) + + -- Create a tasklist widget + mytasklist[s] = awful.widget.tasklist(function(c) + return awful.widget.tasklist.label.currenttags(c, s) + end, mytasklist.buttons) + + -- Create the wibox + mywibox[s] = awful.wibox({ position = "top", screen = s }) + -- Add widgets to the wibox - order matters + mywibox[s].widgets = { + { + mylauncher, + mytaglist[s], + mypromptbox[s], + layout = awful.widget.layout.horizontal.leftright + }, + mylayoutbox[s], + mynextbutton, + mystopbutton, + myplaybutton, + myprevbutton, + mytextclock, + s == 1 and mysystray or nil, + mytasklist[s], + layout = awful.widget.layout.horizontal.rightleft + } +end +-- }}} + +-- {{{ Mouse bindings +root.buttons(awful.util.table.join( + awful.button({ }, 3, function () mymainmenu:toggle() end), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) +)) +-- }}} + +-- {{{ Key bindings +globalkeys = awful.util.table.join( + awful.key({ modkey, }, "Left", awful.tag.viewprev ), + awful.key({ modkey, }, "Right", awful.tag.viewnext ), + awful.key({ modkey, }, "Escape", awful.tag.history.restore), + + awful.key({ modkey, }, "j", + function () + awful.client.focus.byidx( 1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, }, "k", + function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, }, "w", function () mymainmenu:show(true) end), + + -- Layout manipulation + awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end), + awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end), + awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end), + awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end), + awful.key({ modkey, }, "u", awful.client.urgent.jumpto), + awful.key({ modkey, }, "Tab", + function () + awful.client.focus.history.previous() + if client.focus then + client.focus:raise() + end + end), + + -- Standard program + awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end), + awful.key({ modkey, "Control" }, "r", awesome.restart), + awful.key({ modkey, "Shift" }, "q", awesome.quit), + awful.key({ "Mod1", "Control" }, "l", function () awful.util.spawn("i3lock -c 000000") end), + + awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end), + awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end), + awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end), + awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), + awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end), + awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end), + awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end), + awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end), + + -- Prompt + awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end), + + awful.key({ modkey }, "x", + function () + awful.prompt.run({ prompt = "Run Lua code: " }, + mypromptbox[mouse.screen].widget, + awful.util.eval, nil, + awful.util.getdir("cache") .. "/history_eval") + end) +) + +clientkeys = awful.util.table.join( + awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end), + awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end), + awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ), + awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end), + awful.key({ modkey, }, "o", awful.client.movetoscreen ), + awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end), + awful.key({ modkey, }, "n", function (c) c.minimized = not c.minimized end), + awful.key({ modkey, }, "m", + function (c) + c.maximized_horizontal = not c.maximized_horizontal + c.maximized_vertical = not c.maximized_vertical + end) +) + +-- Compute the maximum number of digit we need, limited to 9 +keynumber = 0 +for s = 1, screen.count() do + keynumber = math.min(9, math.max(#tags[s], keynumber)); +end + +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it works on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, keynumber do + globalkeys = awful.util.table.join(globalkeys, + awful.key({ modkey }, "#" .. i + 9, + function () + local screen = mouse.screen + if tags[screen][i] then + awful.tag.viewonly(tags[screen][i]) + end + end), + awful.key({ modkey, "Control" }, "#" .. i + 9, + function () + local screen = mouse.screen + if tags[screen][i] then + awful.tag.viewtoggle(tags[screen][i]) + end + end), + awful.key({ modkey, "Shift" }, "#" .. i + 9, + function () + if client.focus and tags[client.focus.screen][i] then + awful.client.movetotag(tags[client.focus.screen][i]) + end + end), + awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, + function () + if client.focus and tags[client.focus.screen][i] then + awful.client.toggletag(tags[client.focus.screen][i]) + end + end)) +end + +clientbuttons = awful.util.table.join( + awful.button({ }, 1, function (c) client.focus = c; c:raise() end), + awful.button({ modkey }, 1, awful.mouse.client.move), + awful.button({ modkey }, 3, awful.mouse.client.resize)) + +-- Set keys +root.keys(globalkeys) +-- }}} + +-- {{{ Rules +awful.rules.rules = { + -- All clients will match this rule. + { rule = { }, + properties = { border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = true, + keys = clientkeys, + buttons = clientbuttons } }, + { rule = { class = "MPlayer" }, + properties = { floating = true } }, + { rule = { class = "pinentry" }, + properties = { floating = true } }, + { rule = { class = "gimp" }, + properties = { floating = true } }, + -- Set Firefox to always map on tags number 2 of screen 1. + -- { rule = { class = "Firefox" }, + -- properties = { tag = tags[1][2] } }, +} +-- }}} + +-- {{{ Signals +-- Signal function to execute when a new client appears. +client.add_signal("manage", function (c, startup) + -- Add a titlebar + -- awful.titlebar.add(c, { modkey = modkey }) + + -- Enable sloppy focus + c:add_signal("mouse::enter", function(c) + if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier + and awful.client.focus.filter(c) then + client.focus = c + end + end) + + if not startup then + -- Set the windows at the slave, + -- i.e. put it at the end of others instead of setting it master. + -- awful.client.setslave(c) + + -- Put windows in a smart way, only if they does not set an initial position. + if not c.size_hints.user_position and not c.size_hints.program_position then + awful.placement.no_overlap(c) + awful.placement.no_offscreen(c) + end + end +end) + +client.add_signal("focus", function(c) + c.border_color = beautiful.border_focus + -- c.opacity = 1 + end) +client.add_signal("unfocus", function(c) + c.border_color = beautiful.border_normal + -- c.opacity = 0.7 + end) +-- }}} + +awful.util.spawn_with_shell("xcompmgr") +awful.util.spawn_with_shell("xscreensaver") \ No newline at end of file From 8090358d7b7228c4a905aaa46c3bdb9b631a1213 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 27 Jul 2010 22:07:30 +0200 Subject: [PATCH 14/24] .emacs tweaked added awesome theme --- .emacs | 35 +++++-- awesome/rc.lua | 37 ++++--- awesome/themes/themes/default/background.png | Bin 0 -> 43786 bytes .../themes/themes/default/layouts/fairh.png | Bin 0 -> 194 bytes .../themes/themes/default/layouts/fairhw.png | Bin 0 -> 194 bytes .../themes/themes/default/layouts/fairv.png | Bin 0 -> 201 bytes .../themes/themes/default/layouts/fairvw.png | Bin 0 -> 201 bytes .../themes/default/layouts/floating.png | Bin 0 -> 395 bytes .../themes/default/layouts/floatingw.png | Bin 0 -> 388 bytes .../themes/default/layouts/fullscreen.png | Bin 0 -> 202 bytes .../themes/default/layouts/fullscreenw.png | Bin 0 -> 202 bytes .../themes/default/layouts/magnifier.png | Bin 0 -> 209 bytes .../themes/default/layouts/magnifierw.png | Bin 0 -> 209 bytes awesome/themes/themes/default/layouts/max.png | Bin 0 -> 313 bytes .../themes/themes/default/layouts/maxw.png | Bin 0 -> 301 bytes .../themes/themes/default/layouts/tile.png | Bin 0 -> 174 bytes .../themes/default/layouts/tilebottom.png | Bin 0 -> 195 bytes .../themes/default/layouts/tilebottomw.png | Bin 0 -> 216 bytes .../themes/default/layouts/tileleft.png | Bin 0 -> 172 bytes .../themes/default/layouts/tileleftw.png | Bin 0 -> 170 bytes .../themes/themes/default/layouts/tiletop.png | Bin 0 -> 195 bytes .../themes/default/layouts/tiletopw.png | Bin 0 -> 215 bytes .../themes/themes/default/layouts/tilew.png | Bin 0 -> 168 bytes awesome/themes/themes/default/submenu.png | Bin 0 -> 440 bytes .../themes/default/taglist/squarefw.png | Bin 0 -> 187 bytes .../themes/themes/default/taglist/squarew.png | Bin 0 -> 193 bytes .../themes/default/tasklist/floating.png | Bin 0 -> 345 bytes .../themes/default/tasklist/floatingw.png | Bin 0 -> 334 bytes awesome/themes/themes/default/theme.lua | 98 ++++++++++++++++++ .../themes/default/titlebar/close_focus.png | Bin 0 -> 666 bytes .../themes/default/titlebar/close_normal.png | Bin 0 -> 893 bytes .../titlebar/floating_focus_active.png | Bin 0 -> 598 bytes .../titlebar/floating_focus_inactive.png | Bin 0 -> 818 bytes .../titlebar/floating_normal_active.png | Bin 0 -> 799 bytes .../titlebar/floating_normal_inactive.png | Bin 0 -> 814 bytes .../titlebar/maximized_focus_active.png | Bin 0 -> 1013 bytes .../titlebar/maximized_focus_inactive.png | Bin 0 -> 1277 bytes .../titlebar/maximized_normal_active.png | Bin 0 -> 1208 bytes .../titlebar/maximized_normal_inactive.png | Bin 0 -> 1251 bytes .../default/titlebar/ontop_focus_active.png | Bin 0 -> 774 bytes .../default/titlebar/ontop_focus_inactive.png | Bin 0 -> 1073 bytes .../default/titlebar/ontop_normal_active.png | Bin 0 -> 965 bytes .../titlebar/ontop_normal_inactive.png | Bin 0 -> 1073 bytes .../default/titlebar/sticky_focus_active.png | Bin 0 -> 833 bytes .../titlebar/sticky_focus_inactive.png | Bin 0 -> 836 bytes .../default/titlebar/sticky_normal_active.png | Bin 0 -> 967 bytes .../titlebar/sticky_normal_inactive.png | Bin 0 -> 872 bytes awesome/themes/themes/default/xmms2/next.png | Bin 0 -> 290 bytes awesome/themes/themes/default/xmms2/pause.png | Bin 0 -> 218 bytes awesome/themes/themes/default/xmms2/play.png | Bin 0 -> 241 bytes .../themes/themes/default/xmms2/previous.png | Bin 0 -> 289 bytes awesome/themes/themes/default/xmms2/stop.png | Bin 0 -> 203 bytes awesome/themes/themes/test.png | Bin 0 -> 755729 bytes awesome/themes/themes/vt/background.png | Bin 0 -> 43786 bytes awesome/themes/themes/vt/layouts/fairh.png | Bin 0 -> 194 bytes awesome/themes/themes/vt/layouts/fairhw.png | Bin 0 -> 194 bytes awesome/themes/themes/vt/layouts/fairv.png | Bin 0 -> 201 bytes awesome/themes/themes/vt/layouts/fairvw.png | Bin 0 -> 201 bytes awesome/themes/themes/vt/layouts/floating.png | Bin 0 -> 395 bytes .../themes/themes/vt/layouts/floatingw.png | Bin 0 -> 388 bytes .../themes/themes/vt/layouts/fullscreen.png | Bin 0 -> 202 bytes .../themes/themes/vt/layouts/fullscreenw.png | Bin 0 -> 202 bytes .../themes/themes/vt/layouts/magnifier.png | Bin 0 -> 209 bytes .../themes/themes/vt/layouts/magnifierw.png | Bin 0 -> 209 bytes awesome/themes/themes/vt/layouts/max.png | Bin 0 -> 313 bytes awesome/themes/themes/vt/layouts/maxw.png | Bin 0 -> 301 bytes awesome/themes/themes/vt/layouts/tile.png | Bin 0 -> 174 bytes .../themes/themes/vt/layouts/tilebottom.png | Bin 0 -> 195 bytes .../themes/themes/vt/layouts/tilebottomw.png | Bin 0 -> 216 bytes awesome/themes/themes/vt/layouts/tileleft.png | Bin 0 -> 172 bytes .../themes/themes/vt/layouts/tileleftw.png | Bin 0 -> 170 bytes awesome/themes/themes/vt/layouts/tiletop.png | Bin 0 -> 195 bytes awesome/themes/themes/vt/layouts/tiletopw.png | Bin 0 -> 215 bytes awesome/themes/themes/vt/layouts/tilew.png | Bin 0 -> 168 bytes awesome/themes/themes/vt/submenu.png | Bin 0 -> 440 bytes awesome/themes/themes/vt/taglist/squarefw.png | Bin 0 -> 187 bytes awesome/themes/themes/vt/taglist/squarew.png | Bin 0 -> 193 bytes .../themes/themes/vt/tasklist/floating.png | Bin 0 -> 345 bytes .../themes/themes/vt/tasklist/floatingw.png | Bin 0 -> 334 bytes awesome/themes/themes/vt/theme.lua | 98 ++++++++++++++++++ .../themes/themes/vt/titlebar/close_focus.png | Bin 0 -> 666 bytes .../themes/vt/titlebar/close_normal.png | Bin 0 -> 893 bytes .../vt/titlebar/floating_focus_active.png | Bin 0 -> 598 bytes .../vt/titlebar/floating_focus_inactive.png | Bin 0 -> 818 bytes .../vt/titlebar/floating_normal_active.png | Bin 0 -> 799 bytes .../vt/titlebar/floating_normal_inactive.png | Bin 0 -> 814 bytes .../vt/titlebar/maximized_focus_active.png | Bin 0 -> 1013 bytes .../vt/titlebar/maximized_focus_inactive.png | Bin 0 -> 1277 bytes .../vt/titlebar/maximized_normal_active.png | Bin 0 -> 1208 bytes .../vt/titlebar/maximized_normal_inactive.png | Bin 0 -> 1251 bytes .../themes/vt/titlebar/ontop_focus_active.png | Bin 0 -> 774 bytes .../vt/titlebar/ontop_focus_inactive.png | Bin 0 -> 1073 bytes .../vt/titlebar/ontop_normal_active.png | Bin 0 -> 965 bytes .../vt/titlebar/ontop_normal_inactive.png | Bin 0 -> 1073 bytes .../vt/titlebar/sticky_focus_active.png | Bin 0 -> 833 bytes .../vt/titlebar/sticky_focus_inactive.png | Bin 0 -> 836 bytes .../vt/titlebar/sticky_normal_active.png | Bin 0 -> 967 bytes .../vt/titlebar/sticky_normal_inactive.png | Bin 0 -> 872 bytes awesome/themes/themes/vt/xmms2/next.png | Bin 0 -> 290 bytes awesome/themes/themes/vt/xmms2/pause.png | Bin 0 -> 218 bytes awesome/themes/themes/vt/xmms2/play.png | Bin 0 -> 241 bytes awesome/themes/themes/vt/xmms2/previous.png | Bin 0 -> 289 bytes awesome/themes/themes/vt/xmms2/stop.png | Bin 0 -> 203 bytes 103 files changed, 241 insertions(+), 27 deletions(-) create mode 100755 awesome/themes/themes/default/background.png create mode 100755 awesome/themes/themes/default/layouts/fairh.png create mode 100755 awesome/themes/themes/default/layouts/fairhw.png create mode 100755 awesome/themes/themes/default/layouts/fairv.png create mode 100755 awesome/themes/themes/default/layouts/fairvw.png create mode 100755 awesome/themes/themes/default/layouts/floating.png create mode 100755 awesome/themes/themes/default/layouts/floatingw.png create mode 100755 awesome/themes/themes/default/layouts/fullscreen.png create mode 100755 awesome/themes/themes/default/layouts/fullscreenw.png create mode 100755 awesome/themes/themes/default/layouts/magnifier.png create mode 100755 awesome/themes/themes/default/layouts/magnifierw.png create mode 100755 awesome/themes/themes/default/layouts/max.png create mode 100755 awesome/themes/themes/default/layouts/maxw.png create mode 100755 awesome/themes/themes/default/layouts/tile.png create mode 100755 awesome/themes/themes/default/layouts/tilebottom.png create mode 100755 awesome/themes/themes/default/layouts/tilebottomw.png create mode 100755 awesome/themes/themes/default/layouts/tileleft.png create mode 100755 awesome/themes/themes/default/layouts/tileleftw.png create mode 100755 awesome/themes/themes/default/layouts/tiletop.png create mode 100755 awesome/themes/themes/default/layouts/tiletopw.png create mode 100755 awesome/themes/themes/default/layouts/tilew.png create mode 100755 awesome/themes/themes/default/submenu.png create mode 100755 awesome/themes/themes/default/taglist/squarefw.png create mode 100755 awesome/themes/themes/default/taglist/squarew.png create mode 100755 awesome/themes/themes/default/tasklist/floating.png create mode 100755 awesome/themes/themes/default/tasklist/floatingw.png create mode 100755 awesome/themes/themes/default/theme.lua create mode 100755 awesome/themes/themes/default/titlebar/close_focus.png create mode 100755 awesome/themes/themes/default/titlebar/close_normal.png create mode 100755 awesome/themes/themes/default/titlebar/floating_focus_active.png create mode 100755 awesome/themes/themes/default/titlebar/floating_focus_inactive.png create mode 100755 awesome/themes/themes/default/titlebar/floating_normal_active.png create mode 100755 awesome/themes/themes/default/titlebar/floating_normal_inactive.png create mode 100755 awesome/themes/themes/default/titlebar/maximized_focus_active.png create mode 100755 awesome/themes/themes/default/titlebar/maximized_focus_inactive.png create mode 100755 awesome/themes/themes/default/titlebar/maximized_normal_active.png create mode 100755 awesome/themes/themes/default/titlebar/maximized_normal_inactive.png create mode 100755 awesome/themes/themes/default/titlebar/ontop_focus_active.png create mode 100755 awesome/themes/themes/default/titlebar/ontop_focus_inactive.png create mode 100755 awesome/themes/themes/default/titlebar/ontop_normal_active.png create mode 100755 awesome/themes/themes/default/titlebar/ontop_normal_inactive.png create mode 100755 awesome/themes/themes/default/titlebar/sticky_focus_active.png create mode 100755 awesome/themes/themes/default/titlebar/sticky_focus_inactive.png create mode 100755 awesome/themes/themes/default/titlebar/sticky_normal_active.png create mode 100755 awesome/themes/themes/default/titlebar/sticky_normal_inactive.png create mode 100644 awesome/themes/themes/default/xmms2/next.png create mode 100644 awesome/themes/themes/default/xmms2/pause.png create mode 100644 awesome/themes/themes/default/xmms2/play.png create mode 100644 awesome/themes/themes/default/xmms2/previous.png create mode 100644 awesome/themes/themes/default/xmms2/stop.png create mode 100644 awesome/themes/themes/test.png create mode 100755 awesome/themes/themes/vt/background.png create mode 100755 awesome/themes/themes/vt/layouts/fairh.png create mode 100755 awesome/themes/themes/vt/layouts/fairhw.png create mode 100755 awesome/themes/themes/vt/layouts/fairv.png create mode 100755 awesome/themes/themes/vt/layouts/fairvw.png create mode 100755 awesome/themes/themes/vt/layouts/floating.png create mode 100755 awesome/themes/themes/vt/layouts/floatingw.png create mode 100755 awesome/themes/themes/vt/layouts/fullscreen.png create mode 100755 awesome/themes/themes/vt/layouts/fullscreenw.png create mode 100755 awesome/themes/themes/vt/layouts/magnifier.png create mode 100755 awesome/themes/themes/vt/layouts/magnifierw.png create mode 100755 awesome/themes/themes/vt/layouts/max.png create mode 100755 awesome/themes/themes/vt/layouts/maxw.png create mode 100755 awesome/themes/themes/vt/layouts/tile.png create mode 100755 awesome/themes/themes/vt/layouts/tilebottom.png create mode 100755 awesome/themes/themes/vt/layouts/tilebottomw.png create mode 100755 awesome/themes/themes/vt/layouts/tileleft.png create mode 100755 awesome/themes/themes/vt/layouts/tileleftw.png create mode 100755 awesome/themes/themes/vt/layouts/tiletop.png create mode 100755 awesome/themes/themes/vt/layouts/tiletopw.png create mode 100755 awesome/themes/themes/vt/layouts/tilew.png create mode 100755 awesome/themes/themes/vt/submenu.png create mode 100755 awesome/themes/themes/vt/taglist/squarefw.png create mode 100755 awesome/themes/themes/vt/taglist/squarew.png create mode 100755 awesome/themes/themes/vt/tasklist/floating.png create mode 100755 awesome/themes/themes/vt/tasklist/floatingw.png create mode 100755 awesome/themes/themes/vt/theme.lua create mode 100755 awesome/themes/themes/vt/titlebar/close_focus.png create mode 100755 awesome/themes/themes/vt/titlebar/close_normal.png create mode 100755 awesome/themes/themes/vt/titlebar/floating_focus_active.png create mode 100755 awesome/themes/themes/vt/titlebar/floating_focus_inactive.png create mode 100755 awesome/themes/themes/vt/titlebar/floating_normal_active.png create mode 100755 awesome/themes/themes/vt/titlebar/floating_normal_inactive.png create mode 100755 awesome/themes/themes/vt/titlebar/maximized_focus_active.png create mode 100755 awesome/themes/themes/vt/titlebar/maximized_focus_inactive.png create mode 100755 awesome/themes/themes/vt/titlebar/maximized_normal_active.png create mode 100755 awesome/themes/themes/vt/titlebar/maximized_normal_inactive.png create mode 100755 awesome/themes/themes/vt/titlebar/ontop_focus_active.png create mode 100755 awesome/themes/themes/vt/titlebar/ontop_focus_inactive.png create mode 100755 awesome/themes/themes/vt/titlebar/ontop_normal_active.png create mode 100755 awesome/themes/themes/vt/titlebar/ontop_normal_inactive.png create mode 100755 awesome/themes/themes/vt/titlebar/sticky_focus_active.png create mode 100755 awesome/themes/themes/vt/titlebar/sticky_focus_inactive.png create mode 100755 awesome/themes/themes/vt/titlebar/sticky_normal_active.png create mode 100755 awesome/themes/themes/vt/titlebar/sticky_normal_inactive.png create mode 100644 awesome/themes/themes/vt/xmms2/next.png create mode 100644 awesome/themes/themes/vt/xmms2/pause.png create mode 100644 awesome/themes/themes/vt/xmms2/play.png create mode 100644 awesome/themes/themes/vt/xmms2/previous.png create mode 100644 awesome/themes/themes/vt/xmms2/stop.png diff --git a/.emacs b/.emacs index 88c2afd..c5696fc 100644 --- a/.emacs +++ b/.emacs @@ -1,19 +1,29 @@ +(require 'paren) +(require 'uniquify) + (load-file "~/.emacs.d/include.el") (if (eq system-type 'gnu/linux) ; if we're running linux (load-file "~/.emacs.d/linux/.emacs")) -(setq inhibit-startup-message t) ; don't show welcome -(setq-default indent-tabs-mode nil) ; spaces, no tabs -(tool-bar-mode nil) ; no toolbar -(menu-bar-mode nil) ; no menu -(line-number-mode nil) ; don't show line numbers in splitter -(global-linum-mode t) ; show line numbers in gutter -(column-number-mode t) ; show column numbers in splitter -(color-theme-weirdness) ; my theme -(global-font-lock-mode t) ; always show syntax higlighting, this may - ; be old -(fset 'yes-or-no-p 'y-or-n-p) ; don't want to have to type yes or no +(setq inhibit-startup-message t) ; don't show welcome +(setq-default indent-tabs-mode nil) ; spaces, no tabs +(tool-bar-mode nil) ; no toolbar +(menu-bar-mode nil) ; no menu +(line-number-mode nil) ; don't show line numbers in splitter +(global-linum-mode t) ; show line numbers in gutter +(column-number-mode t) ; show column numbers in splitter +(color-theme-weirdness) ; my theme +(global-font-lock-mode t) ; always show syntax higlighting, this may + ; be old +(fset 'yes-or-no-p 'y-or-n-p) ; don't want to have to type yes or no +(setq require-final-newline t) ; I always get bothered by this with the likes of fstab +(show-paren-mode t) +(setq font-lock-maximum-decoration t) ; denotes our interest in maximum possible fontification +(setq uniquify-buffer-name-style 'reverse) + +;; Keybindings +(global-set-key "\C-m" 'newline-and-indent) ;; Autopair Mode (autopair-global-mode) @@ -27,6 +37,9 @@ ;; C# Mode (setq auto-mode-alist (cons `("\\.cs\\'" . csharp-mode) auto-mode-alist)) +;; Batch Mode +(setq auto-mode-alist (cons `("\\.bat\\'" . batch-mode) auto-mode-alist)) + ;; Autosave location (setq backup-directory-alist `((".*" . ,temporary-file-directory))) diff --git a/awesome/rc.lua b/awesome/rc.lua index 3f5e79f..d7f339a 100644 --- a/awesome/rc.lua +++ b/awesome/rc.lua @@ -6,6 +6,7 @@ require("awful.rules") require("beautiful") -- Notification library require("naughty") +require("vicious") -- {{{ Variable definitions -- Themes define colours, icons, and wallpapers @@ -72,6 +73,10 @@ mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon), -- Create a textclock widget mytextclock = awful.widget.textclock({ align = "right" }) +-- Create Network usage widget +netwidget = widget({ type = "textbox" }) +vicious.register(netwidget, vicious.net, "down:${eth0 down_kb} up:${eth0 up_kb}") + -- Create a systray mysystray = widget({ type = "systray" }) @@ -113,9 +118,10 @@ mytasklist.buttons = awful.util.table.join( awful.client.focus.byidx(-1) if client.focus then client.focus:raise() end end)) +xmms2_playing = false -- Create a previous button -myprevbutton = widget({ type = "textbox" }) -myprevbutton.text = " << " +myprevbutton = widget({ type = "imagebox" }) +myprevbutton.image = image(beautiful.xmms2_previous_icon) myprevbutton:buttons(awful.util.table.join( awful.button({ }, 1, function () @@ -123,37 +129,36 @@ myprevbutton:buttons(awful.util.table.join( end) )) -- Create a play button -playing = false -myplaybutton = widget({ type = "textbox" }) -myplaybutton.text = " > " +myplaybutton = widget({ type = "imagebox" }) +myplaybutton.image = image(beautiful.xmms2_play_icon) myplaybutton:buttons(awful.util.table.join( awful.button({ }, 1, function () awful.util.spawn("xmms2 toggleplay") - if playing then playing = false else playing = true end - if playing then - myplaybutton.text = " || " + if xmms2_playing then xmms2_playing = false else xmms2_playing = true end + if xmms2_playing then + myplaybutton.image = image(beautiful.xmms2_pause_icon) else - myplaybutton.text = " > " + myplaybutton.image = image(beautiful.xmms2_play_icon) end end) )) -- Create a stop button -mystopbutton = widget({ type = "textbox" }) -mystopbutton.text = " [ ] " +mystopbutton = widget({ type = "imagebox" }) +mystopbutton.image = image(beautiful.xmms2_stop_icon) mystopbutton:buttons(awful.util.table.join( awful.button({ }, 1, function () - if playing then - playing = false - myplaybutton.text = " > " + if xmms2_playing then + xmms2_playing = false + myplaybutton.image = image(beautiful.xmms2_play_icon) end awful.util.spawn("xmms2 stop") end) )) -- Create a next button -mynextbutton = widget({ type = "textbox" }) -mynextbutton.text = " >> " +mynextbutton = widget({ type = "imagebox" }) +mynextbutton.image = image(beautiful.xmms2_next_icon) mynextbutton:buttons(awful.util.table.join( awful.button({ }, 1, function () diff --git a/awesome/themes/themes/default/background.png b/awesome/themes/themes/default/background.png new file mode 100755 index 0000000000000000000000000000000000000000..0d882b7790c2b47508bab27e3e994fd02c1fd2bf GIT binary patch literal 43786 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 Q`FwrC%FeRn*yX7I3)m+Xj{pDw literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/fairh.png b/awesome/themes/themes/default/layouts/fairh.png new file mode 100755 index 0000000000000000000000000000000000000000..b4e289d6e7dc711098035859923a4aa556350ca9 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHab;j= z1TsG~WlRJ~mjw9*GdMiEkp|)S$Ssku=CXLI5gE>Fl<{iyR+DaxtN(b;^Tv) c2W7?#Q5UwKdX~4(6sU*6)78&qol`;+0FA~n^#A|> literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/fairhw.png b/awesome/themes/themes/default/layouts/fairhw.png new file mode 100755 index 0000000000000000000000000000000000000000..514d66d06c89d5cefa080d0ae23e091b308361f4 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaozqx z_5c6>x^ekTAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;;N%h$koqs*BnK4I@N{tu(Kw&{gP)aWMh`nr4Ua=p?FGZOMYB7LZJ3LhnIk?v eNP19a%n)^9`>AJn`%Hm)7(8A5T-G@yGywqorZr#y literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/fairv.png b/awesome/themes/themes/default/layouts/fairv.png new file mode 100755 index 0000000000000000000000000000000000000000..e5aad70fd0dee93bf5987c968eaec04632271909 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaorvf z0AwZ}6I=z7E(!7rW^j0RBMrn!@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nxdx@v7 zEBg&jE-?Y~T?g)E1BLWGT^vI+&L{uiXXTmE!_HH~!^6t+rg=JJ*>m>9a_fNv3TdP%DF{tDnm{r-UW|=^-*L literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/fairvw.png b/awesome/themes/themes/default/layouts/fairvw.png new file mode 100755 index 0000000000000000000000000000000000000000..f97ce56b2b1554834e7e5cf7bdc3ef9ed2553a62 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaow&_ z|NsC0gx?wRAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;;N%h$(7JhS()vn!|{*$swq}RtpZ-lgPfKLZFPvMiv1F zG@`+l@rK8%|(~rp)>ulg6X0sQUMQ-X`S9%#{HpkGtcC7J;u8tnPqQ;K1|{&c*Hls>~j6` z>4iq`PCs-BGI_8sqrrX3!s)E7KZ%W&#v)(2-b=*N;o4M hJGp*tUnjrJ2TskWA0%rfHcEg3+0)g}Wt~$(696K5rDOmA literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/floatingw.png b/awesome/themes/themes/default/layouts/floatingw.png new file mode 100755 index 0000000000000000000000000000000000000000..7ddf7ae8eab1f27c55cd9cde9f0e4037de5aefb9 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;)m42-s(E{-7? z_ugLHn9iIiar|Sukdf?6FOH?bnhS$DBR{jZ6a`1}~eib;_l$ z%lwuGbEuYB_2svRT$*sKy8Qf8sd@Kz?^%ES^>@j*^7SXCZ8+Y+SjMpAK_UaQ!~q62 zg9b*P1SDodJ=2fs)inoZG;|v=_+Inmuzb`q!O&LkJL88R3C7C%!an~_Vmxm0a-;Ry zMGU<23Orr*ayYb_FaM>wa1rl{!sjvk1*^F~{PYRsKR>G>?^IDkgz$%XoCT}cPt0QN zx71JeYY1vtl5=1|PJ{cD$2EKYx=vK$_$t$|lg**xB#*=^hI1XV+~(`wG_~@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIx8iID}*wH06u3fIpTc#qhuI*O`Sg$f|M@@m kI6g|#GAwXYedof&@Gf+rSGq>{ZJ=HTPgg&ebxsLQ01GuXdH?_b literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/fullscreenw.png b/awesome/themes/themes/default/layouts/fullscreenw.png new file mode 100755 index 0000000000000000000000000000000000000000..2c3cfad9c7d6bb3855d7ad9c743c217fa1814530 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaRt)< z|NmclbN*eBbV-n3FoVOh8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-Jcq zUDh($ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/magnifier.png b/awesome/themes/themes/default/layouts/magnifier.png new file mode 100755 index 0000000000000000000000000000000000000000..14765551c75feaa2fe8600ab10667900a10a9b94 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIxA1ctxd|Qym|v0ENswT^vI+&L{uiXXTmE!_LEVhL?xuO>_T2zM}igZ+O@g7R+J% sVkgkx%skgoSNp@yqzSAR?_8J|1Z-DvKR)ew5oiR1r>mdKI;Vst0DW{g4FCWD literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/magnifierw.png b/awesome/themes/themes/default/layouts/magnifierw.png new file mode 100755 index 0000000000000000000000000000000000000000..97c1d11217423cf68d4642b1535fbefb7f187708 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaRt)< z|NmclbN*eBbV-n3FoVOh8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-Jcq zUDzopr0DCSvSO5S3 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/max.png b/awesome/themes/themes/default/layouts/max.png new file mode 100755 index 0000000000000000000000000000000000000000..4246d56c71bf5fa103d0c038194871be572b4309 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSoB=)|u0R?HrcbYLZ8bj%WHFWm z`2{mLJiCzw;v{*yyD+73*Q5YB7d>4ZLo9lyPT44UM1hCJpHVf&eu{&_ul%RXDi>Zf z{V#v;@y(2_4(iFK;ti!cT`4|?0##TZY6!7EtPqM; zknuNC<2XK9fc=9epGW6f22Dw02d@s6JzWg$Nw1rfB|kS6E6XJ;oR>eplrd+i<$>D{ zOpoj;LS(2IoTr(2EM78o?@b|g z&K{Rl?S4s`2d8Fy|8TnE1jEUWuZmL)uR8wwo&JGQWO;~S{OPR6K+iFFy85}Sb4q9e E0Q-1zcmMzZ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/maxw.png b/awesome/themes/themes/default/layouts/maxw.png new file mode 100755 index 0000000000000000000000000000000000000000..14c161a6e35de4e710fb8de3467b75e6c185c342 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRu?6^qxB}__|Nk$&IsYz@#aI&L z7tG-B>_!@hljQC0!qCAg>jC7P@N{tu(U@3zNipxJ15e9CeJ+F3oJwD%68B!(bZJAJ z_L}P-f)6GiWt|!|VGrZlT`#6z+bwtg#`n@ct^N;AUgtb-=T}i^|L|RH`^&R$8-9kG zhrDF;e#v|7l6KBgafzkeyT0r(mR-8Mxl(_v=2Bj1^^-Wwdb{f2uGkGd+^h6w^xvPbTI6}9olm#>Ewu3HVF>yH3sBsY80av^ zRI9<6LHP&=w-4(hHa0e0E6xLN)EyHVV!DDG<~YdtE?>d)Vxn(NA_K$Q)sm-gi<^NQ Oz~JfX=d#Wzp$Pz0pD-%` literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/tilebottom.png b/awesome/themes/themes/default/layouts/tilebottom.png new file mode 100755 index 0000000000000000000000000000000000000000..aeedbe23034788bf0502779da1764a7ebd518eea GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIx7$`MG#m=f7kU019b(x;TbtoKOD2&&o5Shn`sf4Mu)0K7pH(TP;B90(?STf%JbcD6UwV4CFAC1o;IsFqBO` z3sSJG28|7OqncwH=G-yxm}6&fkDcL?nyl4Tl{izNDGZ*jelF{r5}E)9bvUX3 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/tileleft.png b/awesome/themes/themes/default/layouts/tileleft.png new file mode 100755 index 0000000000000000000000000000000000000000..ab55e087479efb9254f0efabc7720acc3a4eb123 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-u0Z<#|NlU8`tEwu3HVF>yH9Wk$(OgHkB@Q@b zhcNguhy|%|tVu{nU@AJq=D{Gh{RlVDmdhtOo?I;H(rPgF>D1?8*cqnwWxuBCLZDd; Mp00i_>zopr0Gs+QHvj+t literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/tileleftw.png b/awesome/themes/themes/default/layouts/tileleftw.png new file mode 100755 index 0000000000000000000000000000000000000000..c18e7b43fc1df32d0a58bd71e81e9973e5bf1cfb GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;*FUb3f)V@Srm zw>KAZF(~k`9{Bs;KU;9J#tVldvk!jY5f?M-DcZ@j;QnJ{|7f{rR*)$`Fu_8QQH4RQ z-_0|RAIP1@jRF%}28J29*~C-V}>VGHmHaRt&q zurz(=c_77D666=m;PC858ivL>4nJa0`PlBg3pY5H=O z_8W}+T)gJtcEJ;XLYkf~jv*T7lYj8D^33RA=c(c0VdZ)AC4omMUEsMK+cP${4UZ-s dIv^{>P_SynnunQ7a)6o`JYD@<);T3K0RSpqFw+14 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/tiletopw.png b/awesome/themes/themes/default/layouts/tiletopw.png new file mode 100755 index 0000000000000000000000000000000000000000..daf965faaaaddca59ffeca4ba2a98c1b1951c95e GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSjKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sf4Mu)00UpW7Yb!wN0(?STf%JbcD6UwV4CFAC1o;IsFqBO` zYXRgjCV9KNFm$lWdH^|=o-U3d7QM+4t!xq;+-rDPn?!jW7O*B|@}@REd|zuYkyWij uKtb8&fSHj&fvH2r+Q3FdZHKBi%nXb7ih8`2d0_)Igu&C*&t;ucLK6VF)i@9U literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/layouts/tilew.png b/awesome/themes/themes/default/layouts/tilew.png new file mode 100755 index 0000000000000000000000000000000000000000..c722a358e0618163bbe1a936093d327ce2594d8c GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;*FUZSUqV@Srm zw>J-RF$nN5T=@InKX}q?*?{7T;(~}TT&6DCeGD`12ClIz(>>1&G6V>0n5TrhFeJNv z|5;-KG~CAW6oZ)}kYVWH`(mLGM9l+!ho?`kJpUS6QgnQ=h}(~E0w8fuS3j3^P6P000>X1^@s6#OZ}&00004b3#c}2nYxW zd2z8Hj+`L9UQg2LG>t}MEh2;Ea(U|nQA(kdBAd<9YPAv(`2en+Ap7$9 zJe^KwE+TKhr4wXdu~;OEA~PC|UVw8a$i8y9{L}CE<2a6=fKw-kQVQSqsaC6BA~H^r zQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K5~rW#b#FTbqDFk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwVxBIJAr_~TfA}*P^a!vnP7vu~;$dKz X$MK&rzAi=usDi=M)z4*}Q$iB}5zjAs literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/taglist/squarew.png b/awesome/themes/themes/default/taglist/squarew.png new file mode 100755 index 0000000000000000000000000000000000000000..913f2ca6ba168e824644509d6fed72b31c677d49 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!3HGtKUiJ>QjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K5~rW$n|Rx>tZgk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwGM+AuAr_~TfA}*PG;qo!WN03EeKyd5 d%Z(A}pyPS@6O*PM?E$J|@O1TaS?83{1OQ#WGiU$+ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/tasklist/floating.png b/awesome/themes/themes/default/tasklist/floating.png new file mode 100755 index 0000000000000000000000000000000000000000..f29e7f5a9a88b2792344da49b01b69d947002ee4 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RTTHmlEFw9?wpokYtH#M2T~LZfo z*92^Mer#4?rRwc>IUX9fi*!GyTvy>Vwu-CSxnbQ4_sH9e1***6{uVjZJgtzqwEbP{ z1#zbxr3qo@=FB_OE^se(Ug(o6F_z`8Zp;pMKR4&aEHeW&Q`OMRMJux-udd=;DY*Yl k#Fiy5<3D>`d0N99QfGYPmE_VDKtC{ey85}Sb4q9e0NKlaX8-^I literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/tasklist/floatingw.png b/awesome/themes/themes/default/tasklist/floatingw.png new file mode 100755 index 0000000000000000000000000000000000000000..eb802aeebfd3632131a4f00e3fa2e934d5306c54 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RTTHmmFv8?4?(MLXst}5hc#~xw)x%B@E6*sfi`2DGKG8 zB^e6tp1uL$jeH=JnUcKST^JZv^(q?yd22mg977}|OAi`qw=goWJ@_t>60~WSh}hwi zS^Mh`6inP?AhB+<=k`r^7wiyimQOU5I6w_xk2}(ah#ma(7lPOE}mUT5V=(TeUgS_w=T=nLS0%9K4nPZ(N%cW2?IV X(dwl}PXAwnyusk<>gTe~DWM4fUetK} literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/theme.lua b/awesome/themes/themes/default/theme.lua new file mode 100755 index 0000000..c9e9150 --- /dev/null +++ b/awesome/themes/themes/default/theme.lua @@ -0,0 +1,98 @@ +--------------------------- +-- Default awesome theme -- +--------------------------- + +theme = {} + +theme.font = "sans 8" + +theme.bg_normal = "#000000" +theme.bg_focus = "#333333" +theme.bg_urgent = "#ff0000" +theme.bg_minimize = "#444444" + +theme.fg_normal = "#aaaaaa" +theme.fg_focus = "#ffffff" +theme.fg_urgent = "#ffffff" +theme.fg_minimize = "#ffffff" + +theme.border_width = "1" +theme.border_normal = "#000000" +theme.border_focus = "#535d6c" +theme.border_marked = "#91231c" + +-- There are another variables sets +-- overriding the default one when +-- defined, the sets are: +-- [taglist|tasklist]_[bg|fg]_[focus|urgent] +-- titlebar_[bg|fg]_[normal|focus] +-- Example: +--taglist_bg_focus = #ff0000 + +-- Display the taglist squares +theme.taglist_squares_sel = "/usr/share/awesome/themes/default/taglist/squarefw.png" +theme.taglist_squares_unsel = "/usr/share/awesome/themes/default/taglist/squarew.png" + +theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png" + +-- Variables set for theming menu +-- menu_[bg|fg]_[normal|focus] +-- menu_[border_color|border_width] +theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png" +theme.menu_height = "15" +theme.menu_width = "100" + +-- You can add as many variables as +-- you wish and access them by using +-- beautiful.variable in your rc.lua +--bg_widget = #cc0000 + +-- Define the image to load +theme.titlebar_close_button_normal = "/usr/share/awesome/themes/default/titlebar/close_normal.png" +theme.titlebar_close_button_focus = "/usr/share/awesome/themes/default/titlebar/close_focus.png" + +theme.titlebar_ontop_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = "/usr/share/awesome/themes/default/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = "/usr/share/awesome/themes/default/titlebar/ontop_focus_active.png" + +theme.titlebar_sticky_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = "/usr/share/awesome/themes/default/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = "/usr/share/awesome/themes/default/titlebar/sticky_focus_active.png" + +theme.titlebar_floating_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = "/usr/share/awesome/themes/default/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = "/usr/share/awesome/themes/default/titlebar/floating_focus_active.png" + +theme.titlebar_maximized_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = "/usr/share/awesome/themes/default/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = "/usr/share/awesome/themes/default/titlebar/maximized_focus_active.png" + +-- You can use your own command to set your wallpaper +theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" } + +-- You can use your own layout icons like this: +theme.layout_fairh = "/usr/share/awesome/themes/default/layouts/fairhw.png" +theme.layout_fairv = "/usr/share/awesome/themes/default/layouts/fairvw.png" +theme.layout_floating = "/usr/share/awesome/themes/default/layouts/floatingw.png" +theme.layout_magnifier = "/usr/share/awesome/themes/default/layouts/magnifierw.png" +theme.layout_max = "/usr/share/awesome/themes/default/layouts/maxw.png" +theme.layout_fullscreen = "/usr/share/awesome/themes/default/layouts/fullscreenw.png" +theme.layout_tilebottom = "/usr/share/awesome/themes/default/layouts/tilebottomw.png" +theme.layout_tileleft = "/usr/share/awesome/themes/default/layouts/tileleftw.png" +theme.layout_tile = "/usr/share/awesome/themes/default/layouts/tilew.png" +theme.layout_tiletop = "/usr/share/awesome/themes/default/layouts/tiletopw.png" + +theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png" + +theme.xmms2_play_icon = "/home/tom/.config/awesome/themes/default/xmms2/play.png" +theme.xmms2_pause_icon = "/home/tom/.config/awesome/themes/default/xmms2/pause.png" +theme.xmms2_next_icon = "/home/tom/.config/awesome/themes/default/xmms2/next.png" +theme.xmms2_previous_icon = "/home/tom/.config/awesome/themes/default/xmms2/previous.png" +theme.xmms2_stop_icon = "/home/tom/.config/awesome/themes/default/xmms2/stop.png" + +return theme +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 diff --git a/awesome/themes/themes/default/titlebar/close_focus.png b/awesome/themes/themes/default/titlebar/close_focus.png new file mode 100755 index 0000000000000000000000000000000000000000..a5b795849aad35f26a0386aee245f2b49a8d675c GIT binary patch literal 666 zcmV;L0%iS)P)LrSVSRJ3Y*v{1S}*~AOunfA~uR$#KKgm zQl+x8(DP3cmMDrSh=>F?>U~BroV~U;8EJ0L@vbSw1Yjf3OOVfkWu}!y){gzJxEQ z#eB{u!$W9kq!T|cXRvfY{Kb7`_y#x%)rA>oaTaR-cz1FUa4l#u$Ueu$XDZ{suI0-FQ!V`dmLv%rpv(fj6W70W>-Ia=N+M0K*(bI_%5$#+MB5>)f^PaeAU5D)RPfk|o5sPUgnyAW`W&{YCVcs+y=k>&YSNc?5!UxQ(v}~eF>lY=8oj4VFLpX#x07ORE!{{KIIz0%SU-l5rj!jz}r#iLmgbK_5Hl-DuV$gdKulb8Ga_VfJ< z9ABJY$6jP%e$%JA-|F|J&|v;|P6AG*56*wo=im{Z?B~Bln`eV@Q#MQO|C=jLojL1Z z%3$A;bwm6uCv(nyuMg_peX~y7$#gn@PW#RO4y#3_7FXB$XSX&TFj@FRu%(Hiu>avk z>sYgGA<2Fpl|S%Crfz%?;l;8yuT)NHxA?7yznedErHeC$@cwYJW9{Z*eNlSr<1(3Y z=hv-52?sZZ*s-!ODNb4Uz=4DDy{+u6wenmQYyyt@S|M=_+71g?-b{Rut-_piU8$69 z<_dGerxJVqPS_CQ%$U}=TqRR;lFd#t2OSoU=|Z0O?P}Gh2<~B4)Y*FdjS$DIqCKW9 zMhl)7YlbVmy!GenXU01cCAvZ1CjF_(7TCsnB8{tcLH7EP@GW&+p5`y2mfVY)^gKm- z>$+vU(pwYx_s!~hAd(sHd(Bt(@_)YFS2|n||C$U;iK->85hck*sfi`2x+y?{!N|bC zQWuDfj6)2~tc(n;OwF|o46FZhlH;S|zFm1M?6=11n=oD+5c223te1 zH$V-NARB`7(@M${i&7aJQ}UBi6+Ckj(^G>|6H_V+Po~-c6)||a`njxgN@xNAl7Ve| literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/floating_focus_active.png b/awesome/themes/themes/default/titlebar/floating_focus_active.png new file mode 100755 index 0000000000000000000000000000000000000000..3447bb2e797aa7aaa0d801ca1177a1ea231a0484 GIT binary patch literal 598 zcmV-c0;&CpP)GY`6#5dKYoA>zk-ApQ@;_ZcF76#y~Z ziy$@-H-OZ**FFAUzWhHNmn{DEUnuz-NS_0y!J(hlGlYHl544~FZ)AWR5ccJ~YTnoX zp%eeZv0=r}|3LBimi)Ic!7 zWE1?#fFbC`f3UBh;Vz%||G#Y`0s|uvE(f&aKT!R9f(C;P4}6vYGF-j*|9|s3+*mvl zXhFb}_dxXqL>UY=-2XuWL%^f|iuwQl>sMf6;WVJ3e)rx3)fr%95Q2vL-bw&!{x6yJ zAMAP<=1v3}>T}~gP~HG*&LhfjpBq5K?|@whay>YFeQtoT1I{c>s^Q?Y4>2?WZ&^X2 k;q!4B3YH%&=xJ^+0CnFED5!2~q5uE@07*qoM6N<$f?snX`2YX_ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/floating_focus_inactive.png b/awesome/themes/themes/default/titlebar/floating_focus_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..8d724bffe2b89abb89a58307c90e65e6795ca7ee GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkEPcOPuD`*OhUlwY77vUJXr4OLJrD>+AFS zT2;IK`s>{2?E7k-MMmF_BuY%162vYoE&X%rR?{X0iP>3uI0OhL!6)}0 z>i0~JZCST|{pv)CN4wr}=qR}a9{Kt6r|qjUxsDZ)L)z4*}Q$iB}PLo~j literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/floating_normal_active.png b/awesome/themes/themes/default/titlebar/floating_normal_active.png new file mode 100755 index 0000000000000000000000000000000000000000..21a67eee58dc38fe59fefc56730ad5ceb1402341 GIT binary patch literal 799 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkEiN$WeaiCOU+1%UJ9Th9U*nM-)WD*?g4OBm zN0nWHhtGTxWjJg+v&ZlF7w6`5zonrnw^liSzQ~?iTyi(}NmlX_ori`0Mf~F>Yv%3C zd|()`U(T4HCEY2L_r;rC#%s#9+*gp`kh$?{v-sgXGP`mgessw>w#N40%m-82mXw&8 z?+vZpboNb>?z1c&hWgNH*M6wal6rmdoa^aH?QHIq_Jy^MIi_F28#>po^f;yL!0Pj% zmLbjc-zLrpD}PBa={af^{(ICTmGAjR#k#EVNrIsI@-N*rr=2W!R6ezvB*gl(S7VFc zyX#eI2J4zGOWG)Bi%T7{{&#e}<+W#AyEJ0F|H{2TtbMKVQ;bNyb>wsk)UF+5szy6b)~=#4#|2Cw)DG9%ijmgR`-&%S~v67tl0_0 zvN@|Sg-t&YC%5@SSM8!Ji8577TW_y@JZt5l>4rtp0h`KmlUe7y>0k|;U$C3kVo?~! zdiUd}m%mvW$fahXdgD~nb}J?Wg+24;GFoin;H)aO(SBMZy>!A|mSPqK)fc+6AMX#^ zKEGh@pC9@etqPw1>n9|$|7TD?{ZSk*1|tIlOI;u` zG7d2`vobQYGBwvWFt9Q(;CR>R0n?D1pOTqYiK@ZCJjBqz%GlD%z!IXt)==yXPy>Uf LtDnm{r-UW|R2@W2 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/floating_normal_inactive.png b/awesome/themes/themes/default/titlebar/floating_normal_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..ab0f89c76a4f3c375891bc98e961d07805f5b6b3 GIT binary patch literal 814 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE~>&VHY4#~ySZ_{&l$Pd*Ee>RZL8b zK%1h&gk>+EFJ8R(aN&l^aszw&d~U^SpKbC>cgLEUnMK6K$#K5;T6OQ;yLVNKFGgI9 z+HY-dKRwxa-SyXU8?L@Bdwce*Z`RgZH`eCm=NA_gOvqdt|9jv3ze4lo&i&dV5Y5fa zUA8pn;P=`|DvSp<>D+p2=I!l$<@MKz5BBc0?d$J9|LgC+bG8+^xo5?k_Auo*FvT}a zR^U)+cwWhOfiY~>*=2io?Xu$8w{Krsef@l$(`8Kx7Q4Bnd)*$hK46qTY*4d)%BQJ8 zhu3N@HClRQduM0o`k+(K|JMDVnK|o7q0b~05m!f<;~Go--1OG#oL(mI$XCSm;QMoz zOYf%5d(JTbkU`A)t6AG#@3LpOyhMZReCge1%}>7xzXJLpYFcZe1cOE2;VW0J6r6qe zQZqG@X+o-GYGm56FJHby{CM@sD|B^eU%sb_cn*3#_6IZ?tv}>ERq+xA6rz2)C4m&CQ5*0QzJvPrYcrd zR(eXbNnY@tq{2{P!ZYD{Wr9ST&!m(NZ_Um{91n75E&I3O&OerYM}03(@md)cDB_{X zXtyM@s;K;K{NB9GS#nux`PrKf>Q=pX6#8F3LA`xH^MyqQH`X%Vi~*)M)e_f;lH{V) z#FA9q6d=K1WME*a3q(f7A%_YnDIDh0x1W|)H}iJ{J*W}9s;s3yy z=aCWy28QYB>BnZf#ZW_)I{9JRSB7y(L_aC?tU|w1sP(O62J6e|tFPc@!&%Jc-??o( z$_?EU7(}e+)pz$qDn+y^`mw1}s9Bw~uWx|v?ps(aU09pyXl?zOj;%?2p-ON@B<`N* z36Zk8s33kwj^~eeR%6dvgDr18HjN*H?=E5}CxM||s}N|}OoW{)@8a39u;l^V zT7Q~Dgv$%2(f?*Bz3XSOTcLZrp?T`1ig9dmMQBQlfcK-hlMzA9oM~Ko*oR@Q5AKW* z%=sJ0o$Od;i4;|@Q0UGlacz&~WVk<{M+f3cyC2eLsk&!kK9s|b$-q}PN$}peVyt?6 z9?slV9GE+U<1xXwGNWLdDpj#&w4s)QG_ocNn>L8PofzDbDn-`9g^ctXao)JX{>Ne|jC_ci#3;Jojwdg`7mGIP z-)U(}Su{S}_=>D*+a3r#M_{mq?#APMxkU@k>y#}P@`I*36mr_K@liD`%W!7KkRRaV z*^BdjTdk9#p2`K#yBGRTj^a35a9u6nyLEC}0g;~5SvD`nxg%cHJ#c)~v+7p^rv#dD(b_fYZhg%cI#svrX)2lUOA5d3n}cz! zn8u8t-qTF=)J|v;F1#rE?o%PSn`hEnDO@iW8s88uCQF%0@EBM-Vbrq>FNouuMocP3 jm7*Gr=u{%7`h)!&401`p9ZAH400000NkvXXu0mjfjHK)| literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/maximized_focus_inactive.png b/awesome/themes/themes/default/titlebar/maximized_focus_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..e79dc1ea0f5d744f0912a146169d5a823c92cb67 GIT binary patch literal 1277 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmUzPnffIy#(^vlDyqr z82*9aYl$mOKoQOYkH}&m?E%JaC$sH9f@KAc=|CE69>blZFC!Qjm_K^DIEGl9UVG`h ze{iJ8fsgOA<1=-GRwqQv2vB1B=zhsgL5p#cm~Vszm-ewi*@Lk~6_gmld(v{mTGS;7&^Ca(_<g`uqEPyq zCMTETr0IIGT_vTZfiW>X#~&Zuq+>Mm%=v@9zP<;Y7Eahx_BQIttE;Pj)YyIcX~S^( z^y!@Z{MYt8@%w5lHCjBregEzr6&-!@Y0;C|J4=v7tENp;o&>(;M-&!+YLd5eHKJ3G7b#)zIA zv+m4UFLs?fcaG24*x082UyQg@$-b(uUeo{ahKi`hMMmC?jg39KGI;ris=Xqjq7%KA zu2`|+!1K?6At5b`G$h&%K6<3o>Eg6qM|<0b4GWm!>*FkB`mSHOQgVMsVY7om!~OT_ z0vro6rJg>0I%8R9YNU*H8P8#Zh=_;>Cnu{{=}qrmxoXur%XfcYv~r6-dVYTX`@HOI z<^=&73={m8M@B{}PCspEZr*)SSFLBRjiwK#kEcF(LbFcJc&7 zM@tvVEHA37tE&Ry^7_9*|TSN+|5&($T55NYz{@f7~kvDI~yAtK|WNT zq>^~s%zwV!(-#*PZ`r!_;rHL1txgPY-o2CC_4$8;yiLW0=U=P-%ScIewK*xawYOW= z{jr!kckYuS%aq7tg)&And2Z%>`~9H$`#awGcC}SIwr@9Ip~1B>qzmY_Q>RZG@-$c2 zoO|_3Ygy)`lPM9Akw499o}ZihqElG?mz9;(gw&Z&pQcJlNzIrw>(SfW+f{@(@0y(D zoPN6XvBjSH|MRBn$GoYu>alb*k3Jb`&yYiw&&l!H%TRv^8%yj5AGQfva+$i zeA-(_P^)Hw5nzVr>foh3sL`iZ{YGO&MZVHfKFfuT()CD3V;}AnLD8U}fi7AzZCsS>JiWody{an^LB{Ts5`ff(y literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/maximized_normal_active.png b/awesome/themes/themes/default/titlebar/maximized_normal_active.png new file mode 100755 index 0000000000000000000000000000000000000000..7765759edef127c01675c0e073dbe43de436ff7a GIT binary patch literal 1208 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 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/ontop_normal_active.png b/awesome/themes/themes/default/titlebar/ontop_normal_active.png new file mode 100755 index 0000000000000000000000000000000000000000..fc6089517060a44a12c8690b5ae56bab11b0130d GIT binary patch literal 965 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmT$6^TbY*8=%$N#5=* z4F5pzwZxSspa^GyM`SUO_5fqIli7A4!LkC!bRZ2jkKxYImk|sMOglYY978Nlubpz% zJ0wuzSpD_c*EjC5Dlsn5Sb6qFyRfTZtp`_X*dsL_WvPG3HsS2U2OQRHyL;qT{vwf$yv*LNC7+j?y=gSFng61#;ci~p#g4NZ zBeVRT8A@+l-oGjPZo~`C<=~^DU#&&F_3-*qgM`w0*_ zKBepPmC|20u3Ov~#;n@t!JM7D#O^=IetN1M$>#JNPor=2|a z(MStT>@vA!a7nVhxm{lV^t>?a&h>e^i!zZOc#TToj z4Hi0w@v{gxhy@)su;lXkoS|{J=i}~wi>I&nV43)RcG%fQt%q_Sjw+PK8-Hc+*I3qO zbmmXwz5JbbEe&}_m#?pCAs70+4LO;F*IJg~Ol(}dFvAu9h`nR2wm-LmFXaYwAN z=`GNBp&PEvA7=3^t6*Nj@3NK2*%mK!k4G4Hy;OE_+R74tSZM-_DfjwEACiQw9H098 z{Q-ZD=z`@lPt*&0cM5YcaywqSB2*L6v`FQh=8SIP+jlvBM};3tbW-z}yN*MwYg&L{ z-Li+JjGvgoHRZn7aP)jHn@}_J>5pjf<;l_}GZjR29rh?iG#f{^sCKHWp7-CcZTe-o z2eb0w+nv43EM?Xm{B&BU;B3#*LvcYWCU@S>(QI9J?dtj?ThmhRDJy=xrT;}db-S^R zv)E!uV2V~Pag8WRE=o--N!3jO5)4KL29~-&WMmv-Xl7+(Xk}`yZD3$!V8HRN6O<>w z8glbfGSeziH5izO7#dg^TUr@dLNwSKioF49kObKfoS#-wo>-L1;Fyx1l&avFo0y&& Yl$w}QS$Hzl2B?U^)78&qol`;+0Edc{S^xk5 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/ontop_normal_inactive.png b/awesome/themes/themes/default/titlebar/ontop_normal_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..cb2dd7fec00192962b562e4edf1c48403a730dfc GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmT$6^TbY*8=%$N#5=* zKpF^sI`6IrQk(@Ik;OpT1B~5HX4`=T%L*LRfi&1WhC4@JMldiit9rUPhFF|lJLSB$ zvZu)L{kg}zq&U}|Tj&EpX0O zMP?_K(ht|Ad;&Ztlz8}*?pDvYtM8Re|;s*RFjDw4IKqlRZ^@U z{@xW`9<);Mu)&{csft3K2Ml=rKYH}&#O{M$EBiM_@C11Y2tN8~(edK(?gOV!pRS9& z-Y(qflCC?`$Ladlhd+N-{+}(k{Bq|0pi}-XXG-rX2s&~kaw-0q=<&p}Y29lHS=plx zA3l6vTwL5Iu*k_}LQq&|hqvZjAGOCBFH3$IGq5l*3JA8fwLSP+bx^_?=u8V4HbL9Q z>{)G_Hyg{y%O5V3x$?SnikGT~ruAla2fyoIXTE%yIb#{8A`3%F!rQXl*{i3e9^ACX zPrTQS+1lEAMTpjeInPZPBI4uwcdfG)?mup5X7=scP8&`or^Oc?%x1glO>Yj;ntuLy zea3&zYuBzVa_V?lVRO!DVZiwdReSrK7B=kNYwPE7|I^Pu{0tZ5xPw=QOz8O6aWv_S z$=UFQ>s~LqnX@QD=g_uXKbQF8oiSUBPxK$%mb+a|UEO||?c1jqose)|eYNT;-(drVr95S~s|DYDthkV4#`vfDX$ObheE!-zeCce!AOmm9w+`D(k+@o6J8c~v5l$uzQs+$5N7>o=IEOmj%$T-B%%*x2f%E(yTz`)ADKsHz& zm`foVa`RI%(<%vQaC($k3e+G8vLQG>t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU38N O5re0zpUXO@geCyDxyW_^ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/sticky_focus_active.png b/awesome/themes/themes/default/titlebar/sticky_focus_active.png new file mode 100755 index 0000000000000000000000000000000000000000..1106399d777ad671051f94a7f15f0e1addfacb78 GIT binary patch literal 833 zcmV-H1HSx;P)f@kD}&@elCK z!KfEO!9>j-jI!Bv$U<28F;v)`0CQ>uJ@_$d*AA(M1^mW)? zd1K{LGiuak_oZ2Czx(am4@RGi2hYpZl*C(yj-5Mq;`}>SECz#}SvW2LD|3NE73nNb zu~>{0U^M|ZqDE6XnE`ix*Fh6DO6R5*=;7*|7VYp$uRC zaq<4faD8V&QJ@3@z(Zv#_(H$kJ@L`Ihu>SY-ePlu^%mz{QNAU!>7LtQFkIWY#(KQo zk!9&f2%QbC{7(b)9fEzLVHTsh)!^^CV*N{*Os7zWgabp6ffD7nxHuhPbJq3Bo zt{Zb>G+^W52EX6^m3#Icq6HNyCZe7|C&2x1Jm_C;U43-192%bo@O2d)&#E3`OqS8o5v3&R!gXQ-SWSX84@oMx9(-utsCe9@k#p1_e{DLDQt zc;!}Q)q7c!z(b&rV0vDl9;nY$+1PBKZCwZss*k5*G>AA*JwUBi=h4m4H`h-OKAh{% z3vxAmZbmJ-afiitiF(*zGuoVgx={?Udf1?!^ywviI<*e1sKtYDyHYBOmxy-Urd#XM zOZvQ0f0gCtYs6u#GQVP=5jJT>Ef%VabZZ^@^+WWM9?EWhVek;S00000 LNkvXXu0mjfSX_`J literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/sticky_focus_inactive.png b/awesome/themes/themes/default/titlebar/sticky_focus_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..783df6932e07e6072e58c3dd9e97bfb5bcd331dd GIT binary patch literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%b@U_I1CZGssfk$L9 zkoEv$x0Bg+Ai=T%$8;bK*3WR~=*tKO1||nEwdiCme>!SMRtO(J% z|N84M>9wXkhO;XfAG~!;I3_VY=#WIS?~d2Ic5dC-eN4jZVCFLRCy_tw6LOl2J3Cvzt3_UY(dz#A+oarHr+mhH9stZraa#C&%pnx8Hw% zN~J_@(BXDzxta5=Ib3Thzq-1*>RQt&K>=R2S(lb2CG%A6m3#O8eZTk8ONPlj+j5m_ zZ*A+nefxH~OoQrD7p`kj_NR0T%w{jV{4&8n;=s1ITQB8`6)m0O8Jf$Sz4qe!?}f$1 z%@;Gagl*OTQMA(}azPN6=Ol%`WS(~ClHIX7V%=Y#r`g^Wbz!;pvPA4`nsBQVV|jUb z$76}dA1kVt7bo~1I3`hATf4XX^S+&D<zyVaXNTW$W>AU{PSQVwSmhA#eeUI1F>WOtv2zqudeqEC0)9Vilet3CF`YaEY zJ8sB-c!IZP=*kQ8gHthZq`I8CzNzSVA<|8j8IEYLEok t5S*V@Ql40p$^Z;gz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RWF}UdaFe literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/sticky_normal_active.png b/awesome/themes/themes/default/titlebar/sticky_normal_active.png new file mode 100755 index 0000000000000000000000000000000000000000..ea1f2a653cfc5eb4cb7d33631f6ca55e32944529 GIT binary patch literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%b@U_I1CZGssfk$L9 zkoEv$x0Bg+Ai=T%$8;bK*3WR~=*tKO2By=VE{-7(yTGRa$o@5wn%&L`%Mdl(;a7O`{kSr$6&JkZLq#HEATWuIl7`a#F8Yo2fJ z{=9tk@@1KA*K-u)RCd3*Amw}g`u;rRy8>?4|i==hA1@G>X>Rlme;mf{C zdz7Tam-$-Is(}*QPFW*xsaYCF9kCV+vc| z@g!V#P@H<*y8U{G(1y7&A)g|Pa$i4Fzs_E`%tt%o`mSkgm(5!C#ua>Bn|;wfVZYYd zx4XB$Uc6t8t$`t+F4xiand6R~|IY26A9wRr_Uenv+@gCoKDvB8q_lH^psJki9s3>U zFJ4k9d_QplgWv>)T6V(^b8m4JHfs4cM);QFZjpLe%r>3_b=hoH#V%Jw|Hx9kHXTtFnM_-*g zu0BXD;d~*%=OGA9ucng;PngQTDJ@Qv%F=#{oOq!|Kh$= z%E!(h7n%HN|8^d31ODfx1y2u3+_`s8`QPW?)C(<2q7Q%O%2-kVz& z`?n$~C;hulN%#%^NGYBODV>Q&I3NFWydZkpR{IYF_u~mRrz1{=TTEX&LEX|drljxe zx!~v1mT?}=IgwR2ulw}toHcm@M?c;?kSH@rg|l*2v0{8`?NeW~aDCzSi;@TUu5&Xz z(olN4oM*CP_D!jL{rE#>cbRwYJ|?<<=H0ZPAAYLjZ94uc^_$U+v+l3@e%`aaRrkp| z{KfsF;q6ruSK8$O)3|DhYeY$MQEFmIs%{F9U@$T;u+#-2BjXT5Gb9nO2Fa!N5Gk(7?*r(#pURqQTZs>;M1& literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/titlebar/sticky_normal_inactive.png b/awesome/themes/themes/default/titlebar/sticky_normal_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..aabb54ac3f2508235b8bfeb323e0209967fcf3f8 GIT binary patch literal 872 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE(}6TtKf|4)FC!Qjm~uQ_978NlFP(DQJK9m==y{uW*#`UuY@#tD zn>NlCTN1D#cGchNKgaJ}b=|$WG??2dT+8LLQlR0-wiVwE*X!NlG&EDb$}B&;xVrs&_udWha@1s9 z`*p{ZAbG}`I~4kC#NKDSl{}ex9sTyea731 zG~~Wqmtamlb6O~S?Zc`!L4Jp7m7=4g^Uci7?;k7lnG&?2o@K46MDmuaS*(|J4UQ$0 zmz(e3w{IGQ1Bc}FtzyjwABe|CMrN*EzurB_Yf37o=F?`)6Pt48T*xh`s^W6;*t27Y zMDe+U63zlF59Tx%_Z>cbIQ&kOch{l@X6>a4OKVKFACp*;*|m7F@{&xhV-hj9PO39R zWFMRwWOmvpW9{(=FRkqD-FM$TR$$TMZNWQxp4z#rAHmIR2f zN+c)roNe(v6~%q;WyzCs=lEI#cI@8my#N03w{PE0em3*+hwltKuictAcdl*bhu-TY z^OsJUHa+!cu8GuM=7i<^3=Ug^R+{`{mFHorO+GUr$V$$1`}x0r|MEZj-F)rZHM=WW zTd(K&YPyQJdQ4)OK7IPzy?ghr-@M2Fo~U12D?NY%?PN}v7C RMhd8i!PC{xWt~$(698P-aqIv9 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/xmms2/next.png b/awesome/themes/themes/default/xmms2/next.png new file mode 100644 index 0000000000000000000000000000000000000000..17d694dac7782234c5237b661351cd52be839fd1 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^DnKmE!3HFM)UWRaQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Q3`(%rg0Ktc8rPhVH|TWm5y78=*fUKav|7J0fjhIkx5 zJI$M~!GOa>^6=mFHhC(Fb=Daha(sB!*Iscjoo(nLby71%z$s14jbVX^v!qu{8Dqlf zcfL=8EDaf~wiE`s+x*qhjN}!czw=b5>yHy`bCcHPTu^*=>iau^;+?wvNk-+fa(Zc}4OeM*4A)=PBCU|UZ64EH^nNEU d`@isI66?HdXeIyv literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/xmms2/pause.png b/awesome/themes/themes/default/xmms2/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..50c148129494589d34f1cca755e6e8785f166104 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ#^NA%Cx&(BWL^R}Y)RhkE%y{W;-5;PJdx@v7EBh@r8DR!45$~Evpiq>ji(`nz>9%y{W;-5;PJdx@v7EBh@r86gwv|FusS1BD7bT^vI!PM^IJ z$aTPggZaXeivQZ__QJO|=3V=BQRac50Y`|tkV>v~2~R_|%FIKz6fWm#UM|VFX8vkJ z!DY>9j`bTwO?q4}q`u+Ked#;#?^i~KZN^{HjaNI^gf+HooH{p>)##|v3GFiHm+KQB dmvkf-F*X_d>H6MQJ_od%!PC{xWt~$(695vDQCI)~ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/xmms2/previous.png b/awesome/themes/themes/default/xmms2/previous.png new file mode 100644 index 0000000000000000000000000000000000000000..a79ec718c9582edb37bf7406c653e66eb9f4f74d GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^DnKmE!3HFM)UWRaQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Q3`(%rg0Ktc8rPhVH|TWm5y7FH_fXITP;7J9lkhIkx* zJI#^rumTUu@rnQcKYe@DV@sxJj?M3L{xTnZ`1OFdkQk9H%(pN7n<--^}@0PLKi=< gZF^gtVZE0@c+w)dV+mX9fR1JGboFyt=akR{0FPgBf&c&j literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/default/xmms2/stop.png b/awesome/themes/themes/default/xmms2/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..4792366746defc3c09071c5285e4e75d999af294 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G^tAk28_ZrvZCAbW|YuPgg4HW?u+fwNAAxj-RrPZ!4!i_>qf zDDp8V@Hk(L-}F0v=L$)oGZF^_Ix9|wG3-i~zJ0t;i22kk6~-e)5wo<6t*(FF=pJEq qtLf>~U#vFAlD=p78-~{PX3q?B7FIO8*b@dcmci52&t;ucLK6VkTR^P< literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/test.png b/awesome/themes/themes/test.png new file mode 100644 index 0000000000000000000000000000000000000000..7641da8949f67fb8540f32002d96fe5883beb32d GIT binary patch literal 755729 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"D`;JJBq=Q0@;# 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ȵ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%0DJh*33d}JM_Nd+DS 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

_zDwp7*) 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

A)3posi~zKYU;2_<<cAeojHu`0H)lg|?B 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

w4Z-N|BZao#yfV)<{U}0aju%heoEoB_4Vr5 z!u7hFwwa&TIlT5LXFcn=)Gblkr4N=U7jb`+>FmqqmeI7m6(C=5M{uX6wcAXt3#U~U zf7yP`)$jBAJn8i}9tq7BvX)^{HMqQHvt^z?gFwNVZs{kpZ%Eueo~Rvj*>x?$mP?fz ztM{)65;J|(64J>x`$mt^nT($=SI!jJwtmyJyZlEk^3Bx0XsTXhVQkP?ugJ!@LxCl( zbBf_L$v?SI-0yK{PRcNuWyf~GM)QuoL<`Sfcm2+bhh}k^b6uYhYj7mxf%bVNH;)sx z!XqR;K3K1_o9J1|07?Js21m uR7+eVN^CsWngepQ=O54 wfkCyzHKGKpAvZrIGp!P?!N4fQ(A>(@#L57wA$HpHT%ZO9Pgg&ebxsLQ0HuZ<%K!iX diff --git a/awesome/themes/default/titlebar/floating_normal_inactive.png b/awesome/themes/default/titlebar/floating_normal_inactive.png index 958efdfe2e4736df9a3b59e101679b865798388d..ab0f89c76a4f3c375891bc98e961d07805f5b6b3 100644 GIT binary patch delta 761 zcmdnQvW{(nq!b$i1H+LmIo3dmEy>&61xN$IPv_nB6ZLiKnZi9?978NlzrDKOTgFl3 zz{mG@{_QZ{(Y@f6Tut@j5*?IcZ zo40FTzw_&Q@$l#q6UJ@_wq-LC@3os7_e(C^`b;zGsppk?A+fh*zwbSH^k`9ff5rnXV3a(ZM}74ZC-wUaY4a^%(d~q_s#z+ zG;i+QuPp-6+}zw{OM?!6ubrgAcwm#xt+!_0-riSUf1UVX?_S%!{{Hj7{{E{!XIqh* zdsfV84^xfP*U#5EUDl*vv71}E*X=Ru z14jA71~u!ae3}|`c&+AAqor52cXoEJ4?6YyZ{7cynX`@*`b<(0adnhAuCdh5O>e!< z>16_sd_`OjzCU-l^lsX`=M3`?8N{r=npMB;^)7pc%S$x4&X?YO*8KFF@GGD%qNcSb zN-$XT9lmnqO2OHeFEvvmnI@!4rbeb6`|{;W#E)06yh2xpMovr3&dckYIa6}gRjsJk ziSy^oIZ`OowJ5{oZNKG(f zW1>VoNIEq#L~E*IRb{28M4RLV?@1~Q6(&3ro>wMFwE0X*>G0O}|U@)WO?VSyqZnv8Z!GOLQp@5b-V%bX>bwU(c~`Jisqdq<)F^%K3G z!JfaSw0nJB z&>fz$vAOqA+oq5QRyqMEZl7k@V&N`-;*`2s(d!*CSNxppuP`j+o8Ojq)u;4^$^yss zh7Er@&uZv@d-W-M`OO;Xby-Jy=Cb-&<(b_#-_^3~AAC1h ztCT;f@Y0bZM|vJyc<9?5B+sU+D_UXJq|s>=6wLL6fk!uU#evNpf`T8te1o$*Bsv!A z@?QO*6QuE~;KrAS(LA}Ct1i4=@LG{RuzArNF>f zEpd$~Nl7e8wMs5Z1yT%AMh1okx(3F&hNdA#23Cf~Rz?Qe28LD!2BP!$T~T!8=BH$) YRWjhzkaBqYPoM?{Pgg&ebxsLQ0P#uDi~s-t diff --git a/awesome/themes/default/titlebar/maximized_focus_inactive.png b/awesome/themes/default/titlebar/maximized_focus_inactive.png index 62f81964d2efcfbaad8108f6cc4df4794a811c55..e79dc1ea0f5d744f0912a146169d5a823c92cb67 100644 GIT binary patch delta 1167 zcmV;A1aSMA2K@<;83+ad006|aY&(%56AuPrOGiWi{s8^}{_7ajf{{Nge*^JJL_t(I z%dOJSPg7YG!13>EUui8;t6*4|P$B~HN76nZDglxfO;{)jE4H|BLqdkps1P>%2aF3g zY}y!&F&bcG!LlTTu#k{9E@;e4It&r{VUYI_+V|S`Zf7Hg(E)$VoaAoKIr-dkbC1OT z5Ld2T>GOCzzZ4f2SGwJ9e+eZ|Gd_MB|JOInf%WQ9N z>pu)%zI-_-gh=-H_eWY=Tgl~e-&8btT@Or%z6%~<6rKqT=z~}Q(R8)kb zC>Vyp;^HESL_)VLe=D}Iu%H58e_l8oj@Q)Gbli<>lp=rio=) z96NRl!!TG_Sm4Q%CweZIi>a!r?m6!L=!FXx;^)tw?`~^r1E5eS0FX|nSy@>jm&-9X zH;32jB@hVk?%g{cJ$j^DmKA&b`n9^>`aJQubLZmWaJc*WfA#C+^LcFB#xzZ~x3~HD z@gqVAW@l$Pa^whQWo2w`ZZbYTu3MHBTU=aJzkIn2P+MCYaU7>|etv#>etv$h7Hw^9 zB^(Y@C={5Up2qL@qbLds z357xc?C$O!y7T{lA3S)_=k95R^<*=+Xv z;CuJ(4WB-Jdbqc@H>fBIsZ@&6(o)LH%P|atcs$PPf9fixX_CogSXo*5HhkyKo#=@Z zC;B=%I*?_V<>h4>8XB0In&R!-wcGUIun^+r*|TQ> zux*<&XU=fnS4IavuDqA(==n6rm2U*j^jkCs;aPU`}46Z zi)1p1e-Pq#P1Bb4E`9v?F>7mUw+=%AN~t3w zBZ3-$UHTs2p!gfV$=CGKWp08i0000bbVXQnV{&C-bY(4MVRU5x zGB7YXEigGPGBZ>$HaapfIyE;dFfckWFbM96NB{r;C3HntbZu{BX=ZsXWMOn=05UKz hIV~_bEigA!F)%taIXW;oD=;uRFfcta7VMMg0x>WAF`fVb delta 680 zcmV;Z0$2V037H0v83+Ub003^iq_B}86AJ=jOGiWi{_u$WDUm}ge*zInL_t(2&xO*v zYZCz+!13=Tm!_sRo>u7~n4q@B2lP(G2P)h}p@WawscSm82x3%x;o^S~I=Hwbh$2O? zQ3uBqN^!81)1jdRVk}mxCH7L=I=24-0@{)vxEPV%lCqC}Y=tnd z#V%TDK_SmHal_K4bk-K^jdh1F;>U-dG@Y1OY$4ASPmPkMf9nA58a)_05bgu2K!!O= zyu*v1uRJy^?W0~(BEbGwZ}>cAY)qE;g~J4!*iMd7!_ubp)$Stn$d%ya*d%}&qL(UT z_)zfBL1B1CU)xHA866FvE2^j`Smq7woWhMv4yW#*uGQq8v_lrKdB$e?@DTu38m|8b z--&oXJx~Kgf7!|aB}6I|C~kyrMR!N9N(w1D=p;{!Z%xx;|iA-g)9a-pGiE* z(lmYpPusw*e-D~10000bbVXQnWMOn=I%9HWVRU5xGB7bPEif}JF*Q^&Fgh_aIx#gX zFflqXFv%$=0RR91C3HntbYx+4WjbwdWNBu305UK!FfA}MEif`vF*iCjG&(RfD=;xS OFfd(~0_Sa$%mgtMZY^2> diff --git a/awesome/themes/default/titlebar/maximized_normal_active.png b/awesome/themes/default/titlebar/maximized_normal_active.png index 05c4e373df87203d30fc94025637f0f477d2cf0a..7765759edef127c01675c0e073dbe43de436ff7a 100644 GIT binary patch delta 102 zcmdnNxr1|qE=yE$QEFmIs%{F9U@$T;u+#-2BjXT5Gb<8c_n)kei>9nN|tcU|U%+qCyWW+? zf?GrbTB+>nMMaRl7->yuN*J10!c1cFjL&3m*5Y<+ZM%Ce&vW>39?m%m|3h56b}j7j zc)Gk^Z?&Q*2q94a3uqXIf2JtP$occ<1JP)do}M1+>+6}Fo&9lU@OwfKBK3WWltQt9X5-rio#b=|Q@B%)7DOi)!-g%ARO-Q8Ud4-dr;!`|wqobW4f;&4qH7VuTz`%gsf6>vw#>NI7kB7#_ zMhb-j@pzn6DrG5(ayoqZ^5u4*`eaT@*)}~rt>3*|TS& zTrMxadi6>uUqdflx-?W@U*F!+(n2s8MAJ09UN3Loz9kq8;`90Ndc7EiK_-)7b90lW zr6mC@Boc`%@bBS;e?p<5#>U3>(a}+AYHFydsiCf}ju$Up(A3mKsZ^p^EK*ljM<$bD zZEcN}l@$Rjym|8`d+b!4L@!>vI1~s3+N04Z0OfKSfW5svOw&XN!ONE~Q51#h>S}g( zcZtX2qFgR7?CFN>5yfH=f6KDS=krJ@+1}npRaJCd z=iuOgcswqEh4=5@XTSWp0?^#ttOLduZ-H<)OkZCgwr#VvwuYu@L?RI?D=Rs7?i>#u zJb0c?r=NdqPAWh;oz4QkA19ldnvB-g*1+K4AeLpZyu6Ih=cB*BA5~T9>FFVrO5wWh zsjKPvGBGtZf2H~TejUJZ93DM-gsQ3x4-ez_`w0ev0NA$u&7J=TeDmhbu-EJT_1?XE zfeRNdaR2^&s;a7(oSdXoDxoL}Qc7&wrcfw+AAIA+4I>l^8FO=US~MDEe}5mJ&qqT; z0|y5O#9}d0sT9Rx5!<#&r_*P{08>(|+(rKQAi@#^X-Qp%^MX(l-%RM&OGhGFpG z!v~VdB&KPSNF>PRatYv%6SdagXyPmsK)HVX`frM&SU?HL0ydCbSy{2Z2RJSM0zL4< z(~CP(E&u=kC3HntbYpU5VRU6JWMOn=05UKzOF1ntIW00XR53O>GBP?cGb=DKIxsLD zQy)P9001R)MObugZ)9m^c`amNbY%cCFfchSFgYzUGgL7)Ix;dkGBYbMFgh?WLgHz4 HliLC@zpx)- delta 677 zcmaFN*~2zLl7oeTfgx}2k_{6Tg}IrMyxm7ZIleX}rX(diF`KcEFNNL)PE5|llb<00L7WgB7PEWL#c}>J>b+xaXzbG|`njP6z;WW8(^)FL1jn7k=imw>m zeqiXU=J%q#qPJb~)RGgHUe~AyJ`tH(Ct8aPi!2F}7 z^?@xHW0*&$ThY}#El~vtY0mSHf)+P9bDlKPvU2OC7#SEE=o%R78k&X} x8CV$_TNxQ>8yH#{7>Lf}cSX^Vo1c=IR*73f%Hi!lff^)1HU#IVP2S6*1_1IEB_;p> diff --git a/awesome/themes/default/titlebar/ontop_focus_inactive.png b/awesome/themes/default/titlebar/ontop_focus_inactive.png index 3f06b514a0eddbe32ffc703a46b29675654aa7f6..fdb4e942637bc9ed0574a95710754544e81fc669 100644 GIT binary patch delta 962 zcmV;z13moG1+fT_83+ad006|aY&(%56AuPrOGiWi{s8^}{_7ajf{{Nge*+~+L_t(I z%dL}5OB+!XhTk}uF-DOYm274+#YH5LFmd5l`w#j9gethN-NlX4l^bKCAh;Mbia)^a zg<2Pat^$f6A|wRy3+x#4HJN+P?WVO=8yjd}xSM_Ln_XXATwHJWeW0C3 znM_8PQhp;M5Rs8erQE;ee{{52z_e+aFijIu%IS6z+5$84`$QrE+qNNuc>iC(>2&&C zC={}EUB|${0J^%mthu?lcmE8QQhtcX$Thf0630gF|)cTUlv2Vl3@|fvU5Bcw&@>H^NCbvqpjN9rsU{o_z03t$AN;#=0%6c-HL~m~|JkJ9F2q6Ffl}hDBo0Uoh-QC@Y z#bN+}U@!>J^Kf!+yITkw~NsGyM`X!}C1k^Lgy;?SYvm zH#awPk3VmDd3l0}GKoY&Hw>d~XuV#?>FFu<_xD{Q`na*Nk$YU;Po>jon~1)|Vlln1 zukTf;5CY9+6X)mWI5;?PnfYxlm&-qK#qXM*pSOwVOEenQfBXCUTY`PxN3mGM;o+gn z%x~A$*7Co{U-)=tW+u%utUSM%ot+(1Rdpg94nqimN~MBYt%g#m zgsZD7XqtvVe;@!M1bpAe?d>gwhK9Z#9UT>3t@vlP^?Dti=b>CK!*yNwzMmx`+~40% z8-@YXGywpbrlDLe+W>a|1|Ahc;O_1Y<#HL#W;4&sA6HgZb^%~&YU=al9e!5IZe~_Kh61t-I&=D zLTm$glgVVVXrZmGt*n$XS*=#Lnb~?C{|@9G)}vd70CNBU03~!qSaf4@Wnpw>Eo5PI zWdJfTFgYzSIW00XR53O>GBG+eH!CnOIxsK@?ukeM001R)MObugZ)9m^c`amNbY%cC kFfchS7%(|4FgH{&Fgi0iIxsmaFfckWFg-CA?31AaF;d^J&Hw-a delta 607 zcmV-l0-*h|2+{?R83+Ub003^iq_B}86AJ=jOGiWi{_u$WDUm}ge*wx#L_t(2&yA8l zXcKW1$3O9s7^}#oN|!9Z;!p@wt`4rbY>wR(YDTA~TU{(pF4krdIs_9+S0RI=&?-3S z;(^7jctN!2&|cfb-sOJ3-?_vzcNeJdO~3a(eBYnng9+AXy=YB}XVRe!GdfbJ;;NU- zT$&(IFHs_@rxO!kf4y`Y3%T?k@cLpwnB3%wSX;ahj+W;M@wtOqz5sqM40{fMGKRe> zQrl<>Ewm{ug{nw#OWY*_4BoQmDp$T!Xh(V4ZMvCe6j4NDk|WOyMg9zRruapdK7GEU zaZzNWn$cR|IsqVo-l%AgtCWE(0bluns%2pFp=`}F!(`J0e>l8H*S6XQym9Vzf7(-p zEHdQ-PTAvwryp&#N8i0}shzSpolunw*yp3Ct8FKC8_z7YGiTn2!698fdAj<_N$mNt zqdTXZ#XQ7AcmAP}9UH~U5hNNZpsn*)3^wqA0gB7RlGkGJsEsFf4j&(nWA^#NAwE7K z1@7A^Wo;Rpe-UtkN7zst*Nc>ZJSP^r31wZ89CE;sqpB}gHdkcz!1>H?a;VDKAq}_j zEfS%ppKdhHdwft=Yk9NhzMf4g3)x|I9EI&hw9xP9(V_kY{IJJ13w5}Z0000bbVXQn zWMOn=I%9HWVRU5xGB7bPEif}JF*Q^&Fgh_aIx#gXIxsOhFfhp}CjkHe03~!qSaf7z tbY(hiZ)9m^c>ppnF)%GKGc7POR53R?H8eUfH7hVNIxsL@mgjAf1ThFY4J`lw diff --git a/awesome/themes/default/titlebar/ontop_normal_active.png b/awesome/themes/default/titlebar/ontop_normal_active.png index 9d59779c38f45a2c2839411b7ef8bd7cb75fedd8..fc6089517060a44a12c8690b5ae56bab11b0130d 100644 GIT binary patch delta 102 zcmX@gew2NK6?0T_QEFmIs%{F9U@$T;u+#-2BjXT5Gb<8c_n)kei>9nN|tcU|x{+goBnKM<1H+LmIo1;uh56Z%yxm=Zd?5Jgyt{s)y-q!|s;7%%h{fr(Q_g!U zdx{+2pL^U(igVq`mA)A!e3rclG94})6(4p~e|+MZ&m702bkF9=`kS{KEGoFw0_SX1 zWOiaH{cv5%C%|(;iHA?=-c`0bv#%Ov9jFWt38}r`{(aw9XZQY%yLMR_o0^(#+P}a4 zX7|4J;ulYy;+h=f)~T_pe#@34b&?VXDlBB&G(?($vi3}8@z+<1W%BcfZ(H#79B4h?>=z)^y#|T z>+QmwF6p{6eVnd;efaZd<^S1o%P(i{4?5-Va;EgIf}kTuBA4Qyi5^cpo7UC8mXMV_ z`taey_r=A&Vn;Z$;3e9^&dwyWOs<{+)< z=bzVS{O7!O?b;%zj+YfS=bRP>oWD@Dx6f%|!`{8NelGVv{rtnva6yhccxA|hj(;6T zlg^l&4PUtK^`e_Oiz0LmZOip@i7(z6v$gm{|Iux^+tt+7y_W{Pbgr-8e@=q=`JUGm z6&3XdE?yMOx&6#*<@%dB+kVYh`ai~VVL*njkI$cHpMN&BB_1ffyUv-T@$={6J9qES z&CSo3FWr0GzI}?(2?^)bSF5h_9X3!{%2Rf`TJX)siVHbrjDM=1c5v9u=dZ2(Z-4FJ z!Gq!l&##Gyh>%F@ab;&?Q)p>;Y>{C$d&iC)2flta-BTZ@Z{pi5z%-}$&b@nwOwOLV zdUfjOtfT#_bGP5#v46k&)~Hs2MIJ5|78VlxEKGBc17l!s96yuBel9ho$sGZ!uL9A9 zyzQ%lPVL{eZQCgZ18eKwhUk!pS|FOXvOk^XB%HpkJ2Hr+clmH#alus!%K|FYoqRslPVtb&%K3 zH{5^OQv@#vW*+nT0L(wCC9V-A$wjG&C8@e8K!U-@z`#-$h>VOw49%>JjI4}|wG9lc g3=Cw05f6ZS;*H+|K=sR0O zQ6J6oHi4O15xeEWC%&r}`OutnO>2Y0wOzqBVtr!MFKC=vaWwhC?`bnXGejIbb9d9R z-I5VomApF_uAR`gMeI@ANlUxf{gNl9Ic*PJ(fsv5#9r=VjdMoL3jT7UkJ)zDs4Z}2 z_GR{EyT3-~u>vD2kI;274FUs$z!C$rm|b!+oPyX&?uK#z*?V5oHf_S}=>_N=S?x^HloC6kuNNN0!T?jK~y-) zrIf#K+CUV?zxJKZHnELSv$3J7OQs5`|3W%fbU)Odd#$j}&dxrao}PXdLRhOJA|hz5i7_V1<+8sG z+-x@g_WS+$8f00pEDJ=0*=+WMS1OecCnqN*tu>TVP)a>&(xzg6V+?w|9`5h&k4vS} zF=Gt2Z6kf!wvF4{+jks*C8b0P)>=QxEO0iPq0{MLFc`qL?X}Wv7ILMONmXqFYpv1m z_i=M`gVAWTR<$qqa=A2Fpi&A+k|2&_42MH>yIm|6i}mMbJ>3;V1m5X%7R_c8g+c*$ zcXx>67~}DHd#7`MU{Aot7G|lu|rNl5-;Z2Eb$$t>*Nl@B6Q}!6%c+ zZzB4W9ko@xy<9H8Sb2k9tJN;TF#MRlGsbXqbOg`y5XbS)%gf96JDa!9t28{%Ll6Y; zeIJhFU_PH8e!Hb$$8iuv5sJkk!Z1t~vxC8D1VMl>4A*df-}fPecplhwU3i{{LZN^l z2oOaPq9}q8BKI%JT_hsSIfoDej^nI-E*6WBQs&NIu3{m-9FE&{RaW=(7sjuJ~sdW03~!qSaf4@Wnpw>Eo5PIWdJfTFgYzSIW00XR53O> zGBG+eH!CnXFgh?W2=0kU0000bbVXQnZEs|0W_c}SVRU5xGB7YXEigGPFgH{&Fgi0i UIxsmaFfckWFg-CA?2|GAF?@|mIRF3v delta 511 zcmX@Y_LyaYq!y3I1X zk@tJd=Z<#wi%+)uI{G^Kv`gE4_;9(gXoYiJ-5i4h>W1fU?$n&^990|WRew9kjUnoE z%H6jKuHSVZ_pX%tSM+S%rK6l5_HB2m`^f$KY$(HgN2f=Nn~!#JFY|X+lDbl{{$DBI zii^u!Cr`MszJ*a~)|SkR3NP5Nb4n^K@}0e)V7k+b9+d@d9xmLe+SaSzo@?ofOVybj z^z!r9ny=#Jb?Xj?iJbcgj0n{d*NBp+l*E!$tK_0oAjM#0U}&IgV61Cs8e(K%WoT?= wXsT^sXk}nNr0NeTHKmY&$ diff --git a/awesome/themes/default/titlebar/sticky_normal_active.png b/awesome/themes/default/titlebar/sticky_normal_active.png index 00a7fa882f4f9d53603772b6f884864a5423ebe1..ea1f2a653cfc5eb4cb7d33631f6ca55e32944529 100644 GIT binary patch delta 102 zcmX@kew=-S4Rcg-QEFmIs%{F9U@$T;u+#-2BjXT5Gb<8c_n)kei>9nN|tcU|&61xN$IPv_nB6ZLiKnQ}Z`978NlFP(DQJK9m= z=y{uW*#`UuY@#tDn>NlCTN1D#cGchNKgaJ}b=|$WG??2dT+8LLQlR0-wiVwE*X!Nl zG&EDb$}B&; zxVrs&_udWha@1s9`?Y?@lpuM=nmVx=L0+G2$`vx!CiXO5lk%J-F#kHY*|7y0T_>j` zZ&=^@pSSGk1AWHZi!|iET$f-@K66?qd+o!jH$i@fYL%j+qw~$o&F>#8^qCU0p`K-} zsYLRYt68jaG#B?BK72U*PLy}oq6TK|r3y=HOtv4BSd!Vb zc(L-5Os-=RF}F^tGel$`oEl_y+9+e~@dq!h?Csrm-#u1f(c*2vJA0nmyyrVhbqf~g zoWAh3?BeUM7haYGh_Ff|C-j_c@jX=^#eMH($&+*E_*w*Z?B4CX|Nil}Z{JRSHuLg_ z?+iPy-I_Odu5IRr-s>gvmrj{BJ@sdkon$o^ePCu{Ir*Qf&{rC3q_G@Nwo$lU#d$U;g;fEWt_hdIT zD;!NMtdNmi8J4{vy*?!4QDKO#9oO!l-ICV=U*32;Kd5ZU(zM2KXS3;MamSMaLuC>- z2;7bS@MhU`OOB=mfBxk?6A!y(DOq{5RdHX4o!g_GHw1(d4Qi@0L)@OEM0_f&x2^s5 zQkW@7P2<=r0rxi9`SWEA5Af~z)L{aod6yJUyOuOABw z%^9LpRJOci?|mGm@JKRtm&%;$Q9;$*7ZRJ~f^C*x-E&?*aPo!Zw#-H9Q%ofuZ;r?f zIk)fMET8E5CngpmtJ&wTy1M^XNd1b%Qhl@RfbpVQ;u=wsl30>zm0Xkxq!^403=MP* zjCBo7LyQcp42`Xf473dltqcrA=kdFuXvob^$xN%nts&*`_Mbovk{}y`^V3So6N^$A P%FE03GV><;F-rjekM-td diff --git a/awesome/themes/themes/default/xmms2/next.png b/awesome/themes/default/xmms2/next.png similarity index 100% rename from awesome/themes/themes/default/xmms2/next.png rename to awesome/themes/default/xmms2/next.png diff --git a/awesome/themes/themes/default/xmms2/pause.png b/awesome/themes/default/xmms2/pause.png similarity index 100% rename from awesome/themes/themes/default/xmms2/pause.png rename to awesome/themes/default/xmms2/pause.png diff --git a/awesome/themes/themes/default/xmms2/play.png b/awesome/themes/default/xmms2/play.png similarity index 100% rename from awesome/themes/themes/default/xmms2/play.png rename to awesome/themes/default/xmms2/play.png diff --git a/awesome/themes/themes/default/xmms2/previous.png b/awesome/themes/default/xmms2/previous.png similarity index 100% rename from awesome/themes/themes/default/xmms2/previous.png rename to awesome/themes/default/xmms2/previous.png diff --git a/awesome/themes/themes/default/xmms2/stop.png b/awesome/themes/default/xmms2/stop.png similarity index 100% rename from awesome/themes/themes/default/xmms2/stop.png rename to awesome/themes/default/xmms2/stop.png diff --git a/awesome/themes/themes/test.png b/awesome/themes/test.png similarity index 100% rename from awesome/themes/themes/test.png rename to awesome/themes/test.png diff --git a/awesome/themes/themes/default/theme.lua b/awesome/themes/themes/default/theme.lua deleted file mode 100755 index c9e9150..0000000 --- a/awesome/themes/themes/default/theme.lua +++ /dev/null @@ -1,98 +0,0 @@ ---------------------------- --- Default awesome theme -- ---------------------------- - -theme = {} - -theme.font = "sans 8" - -theme.bg_normal = "#000000" -theme.bg_focus = "#333333" -theme.bg_urgent = "#ff0000" -theme.bg_minimize = "#444444" - -theme.fg_normal = "#aaaaaa" -theme.fg_focus = "#ffffff" -theme.fg_urgent = "#ffffff" -theme.fg_minimize = "#ffffff" - -theme.border_width = "1" -theme.border_normal = "#000000" -theme.border_focus = "#535d6c" -theme.border_marked = "#91231c" - --- There are another variables sets --- overriding the default one when --- defined, the sets are: --- [taglist|tasklist]_[bg|fg]_[focus|urgent] --- titlebar_[bg|fg]_[normal|focus] --- Example: ---taglist_bg_focus = #ff0000 - --- Display the taglist squares -theme.taglist_squares_sel = "/usr/share/awesome/themes/default/taglist/squarefw.png" -theme.taglist_squares_unsel = "/usr/share/awesome/themes/default/taglist/squarew.png" - -theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png" - --- Variables set for theming menu --- menu_[bg|fg]_[normal|focus] --- menu_[border_color|border_width] -theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png" -theme.menu_height = "15" -theme.menu_width = "100" - --- You can add as many variables as --- you wish and access them by using --- beautiful.variable in your rc.lua ---bg_widget = #cc0000 - --- Define the image to load -theme.titlebar_close_button_normal = "/usr/share/awesome/themes/default/titlebar/close_normal.png" -theme.titlebar_close_button_focus = "/usr/share/awesome/themes/default/titlebar/close_focus.png" - -theme.titlebar_ontop_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_normal_inactive.png" -theme.titlebar_ontop_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_focus_inactive.png" -theme.titlebar_ontop_button_normal_active = "/usr/share/awesome/themes/default/titlebar/ontop_normal_active.png" -theme.titlebar_ontop_button_focus_active = "/usr/share/awesome/themes/default/titlebar/ontop_focus_active.png" - -theme.titlebar_sticky_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_normal_inactive.png" -theme.titlebar_sticky_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_focus_inactive.png" -theme.titlebar_sticky_button_normal_active = "/usr/share/awesome/themes/default/titlebar/sticky_normal_active.png" -theme.titlebar_sticky_button_focus_active = "/usr/share/awesome/themes/default/titlebar/sticky_focus_active.png" - -theme.titlebar_floating_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/floating_normal_inactive.png" -theme.titlebar_floating_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/floating_focus_inactive.png" -theme.titlebar_floating_button_normal_active = "/usr/share/awesome/themes/default/titlebar/floating_normal_active.png" -theme.titlebar_floating_button_focus_active = "/usr/share/awesome/themes/default/titlebar/floating_focus_active.png" - -theme.titlebar_maximized_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_normal_inactive.png" -theme.titlebar_maximized_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_focus_inactive.png" -theme.titlebar_maximized_button_normal_active = "/usr/share/awesome/themes/default/titlebar/maximized_normal_active.png" -theme.titlebar_maximized_button_focus_active = "/usr/share/awesome/themes/default/titlebar/maximized_focus_active.png" - --- You can use your own command to set your wallpaper -theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" } - --- You can use your own layout icons like this: -theme.layout_fairh = "/usr/share/awesome/themes/default/layouts/fairhw.png" -theme.layout_fairv = "/usr/share/awesome/themes/default/layouts/fairvw.png" -theme.layout_floating = "/usr/share/awesome/themes/default/layouts/floatingw.png" -theme.layout_magnifier = "/usr/share/awesome/themes/default/layouts/magnifierw.png" -theme.layout_max = "/usr/share/awesome/themes/default/layouts/maxw.png" -theme.layout_fullscreen = "/usr/share/awesome/themes/default/layouts/fullscreenw.png" -theme.layout_tilebottom = "/usr/share/awesome/themes/default/layouts/tilebottomw.png" -theme.layout_tileleft = "/usr/share/awesome/themes/default/layouts/tileleftw.png" -theme.layout_tile = "/usr/share/awesome/themes/default/layouts/tilew.png" -theme.layout_tiletop = "/usr/share/awesome/themes/default/layouts/tiletopw.png" - -theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png" - -theme.xmms2_play_icon = "/home/tom/.config/awesome/themes/default/xmms2/play.png" -theme.xmms2_pause_icon = "/home/tom/.config/awesome/themes/default/xmms2/pause.png" -theme.xmms2_next_icon = "/home/tom/.config/awesome/themes/default/xmms2/next.png" -theme.xmms2_previous_icon = "/home/tom/.config/awesome/themes/default/xmms2/previous.png" -theme.xmms2_stop_icon = "/home/tom/.config/awesome/themes/default/xmms2/stop.png" - -return theme --- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 diff --git a/awesome/themes/themes/vt/background.png b/awesome/themes/themes/vt/background.png deleted file mode 100755 index 0d882b7790c2b47508bab27e3e994fd02c1fd2bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43786 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 Q`FwrC%FeRn*yX7I3)m+Xj{pDw diff --git a/awesome/themes/themes/vt/layouts/fairh.png b/awesome/themes/themes/vt/layouts/fairh.png deleted file mode 100755 index b4e289d6e7dc711098035859923a4aa556350ca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHab;j= z1TsG~WlRJ~mjw9*GdMiEkp|)S$Ssku=CXLI5gE>Fl<{iyR+DaxtN(b;^Tv) c2W7?#Q5UwKdX~4(6sU*6)78&qol`;+0FA~n^#A|> diff --git a/awesome/themes/themes/vt/layouts/fairhw.png b/awesome/themes/themes/vt/layouts/fairhw.png deleted file mode 100755 index 514d66d06c89d5cefa080d0ae23e091b308361f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaozqx z_5c6>x^ekTAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;;N%h$koqs*BnK4I@N{tu(Kw&{gP)aWMh`nr4Ua=p?FGZOMYB7LZJ3LhnIk?v eNP19a%n)^9`>AJn`%Hm)7(8A5T-G@yGywqorZr#y diff --git a/awesome/themes/themes/vt/layouts/fairv.png b/awesome/themes/themes/vt/layouts/fairv.png deleted file mode 100755 index e5aad70fd0dee93bf5987c968eaec04632271909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaorvf z0AwZ}6I=z7E(!7rW^j0RBMrn!@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nxdx@v7 zEBg&jE-?Y~T?g)E1BLWGT^vI+&L{uiXXTmE!_HH~!^6t+rg=JJ*>m>9a_fNv3TdP%DF{tDnm{r-UW|=^-*L diff --git a/awesome/themes/themes/vt/layouts/fairvw.png b/awesome/themes/themes/vt/layouts/fairvw.png deleted file mode 100755 index f97ce56b2b1554834e7e5cf7bdc3ef9ed2553a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaow&_ z|NsC0gx?wRAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;;N%h$(7JhS()vn!|{*$swq}RtpZ-lgPfKLZFPvMiv1F zG@`+l@rK8%|(~rp)>ulg6X0sQUMQ-X`S9%#{HpkGtcC7J;u8tnPqQ;K1|{&c*Hls>~j6` z>4iq`PCs-BGI_8sqrrX3!s)E7KZ%W&#v)(2-b=*N;o4M hJGp*tUnjrJ2TskWA0%rfHcEg3+0)g}Wt~$(696K5rDOmA diff --git a/awesome/themes/themes/vt/layouts/floatingw.png b/awesome/themes/themes/vt/layouts/floatingw.png deleted file mode 100755 index 7ddf7ae8eab1f27c55cd9cde9f0e4037de5aefb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;)m42-s(E{-7? z_ugLHn9iIiar|Sukdf?6FOH?bnhS$DBR{jZ6a`1}~eib;_l$ z%lwuGbEuYB_2svRT$*sKy8Qf8sd@Kz?^%ES^>@j*^7SXCZ8+Y+SjMpAK_UaQ!~q62 zg9b*P1SDodJ=2fs)inoZG;|v=_+Inmuzb`q!O&LkJL88R3C7C%!an~_Vmxm0a-;Ry zMGU<23Orr*ayYb_FaM>wa1rl{!sjvk1*^F~{PYRsKR>G>?^IDkgz$%XoCT}cPt0QN zx71JeYY1vtl5=1|PJ{cD$2EKYx=vK$_$t$|lg**xB#*=^hI1XV+~(`wG_~@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIx8iID}*wH06u3fIpTc#qhuI*O`Sg$f|M@@m kI6g|#GAwXYedof&@Gf+rSGq>{ZJ=HTPgg&ebxsLQ01GuXdH?_b diff --git a/awesome/themes/themes/vt/layouts/fullscreenw.png b/awesome/themes/themes/vt/layouts/fullscreenw.png deleted file mode 100755 index 2c3cfad9c7d6bb3855d7ad9c743c217fa1814530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaRt)< z|NmclbN*eBbV-n3FoVOh8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-Jcq zUDh($ diff --git a/awesome/themes/themes/vt/layouts/magnifier.png b/awesome/themes/themes/vt/layouts/magnifier.png deleted file mode 100755 index 14765551c75feaa2fe8600ab10667900a10a9b94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIxA1ctxd|Qym|v0ENswT^vI+&L{uiXXTmE!_LEVhL?xuO>_T2zM}igZ+O@g7R+J% sVkgkx%skgoSNp@yqzSAR?_8J|1Z-DvKR)ew5oiR1r>mdKI;Vst0DW{g4FCWD diff --git a/awesome/themes/themes/vt/layouts/magnifierw.png b/awesome/themes/themes/vt/layouts/magnifierw.png deleted file mode 100755 index 97c1d11217423cf68d4642b1535fbefb7f187708..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaRt)< z|NmclbN*eBbV-n3FoVOh8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-Jcq zUDzopr0DCSvSO5S3 diff --git a/awesome/themes/themes/vt/layouts/max.png b/awesome/themes/themes/vt/layouts/max.png deleted file mode 100755 index 4246d56c71bf5fa103d0c038194871be572b4309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSoB=)|u0R?HrcbYLZ8bj%WHFWm z`2{mLJiCzw;v{*yyD+73*Q5YB7d>4ZLo9lyPT44UM1hCJpHVf&eu{&_ul%RXDi>Zf z{V#v;@y(2_4(iFK;ti!cT`4|?0##TZY6!7EtPqM; zknuNC<2XK9fc=9epGW6f22Dw02d@s6JzWg$Nw1rfB|kS6E6XJ;oR>eplrd+i<$>D{ zOpoj;LS(2IoTr(2EM78o?@b|g z&K{Rl?S4s`2d8Fy|8TnE1jEUWuZmL)uR8wwo&JGQWO;~S{OPR6K+iFFy85}Sb4q9e E0Q-1zcmMzZ diff --git a/awesome/themes/themes/vt/layouts/maxw.png b/awesome/themes/themes/vt/layouts/maxw.png deleted file mode 100755 index 14c161a6e35de4e710fb8de3467b75e6c185c342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRu?6^qxB}__|Nk$&IsYz@#aI&L z7tG-B>_!@hljQC0!qCAg>jC7P@N{tu(U@3zNipxJ15e9CeJ+F3oJwD%68B!(bZJAJ z_L}P-f)6GiWt|!|VGrZlT`#6z+bwtg#`n@ct^N;AUgtb-=T}i^|L|RH`^&R$8-9kG zhrDF;e#v|7l6KBgafzkeyT0r(mR-8Mxl(_v=2Bj1^^-Wwdb{f2uGkGd+^h6w^xvPbTI6}9olm#>Ewu3HVF>yH3sBsY80av^ zRI9<6LHP&=w-4(hHa0e0E6xLN)EyHVV!DDG<~YdtE?>d)Vxn(NA_K$Q)sm-gi<^NQ Oz~JfX=d#Wzp$Pz0pD-%` diff --git a/awesome/themes/themes/vt/layouts/tilebottom.png b/awesome/themes/themes/vt/layouts/tilebottom.png deleted file mode 100755 index aeedbe23034788bf0502779da1764a7ebd518eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIx7$`MG#m=f7kU019b(x;TbtoKOD2&&o5Shn`sf4Mu)0K7pH(TP;B90(?STf%JbcD6UwV4CFAC1o;IsFqBO` z3sSJG28|7OqncwH=G-yxm}6&fkDcL?nyl4Tl{izNDGZ*jelF{r5}E)9bvUX3 diff --git a/awesome/themes/themes/vt/layouts/tileleft.png b/awesome/themes/themes/vt/layouts/tileleft.png deleted file mode 100755 index ab55e087479efb9254f0efabc7720acc3a4eb123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-u0Z<#|NlU8`tEwu3HVF>yH9Wk$(OgHkB@Q@b zhcNguhy|%|tVu{nU@AJq=D{Gh{RlVDmdhtOo?I;H(rPgF>D1?8*cqnwWxuBCLZDd; Mp00i_>zopr0Gs+QHvj+t diff --git a/awesome/themes/themes/vt/layouts/tileleftw.png b/awesome/themes/themes/vt/layouts/tileleftw.png deleted file mode 100755 index c18e7b43fc1df32d0a58bd71e81e9973e5bf1cfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;*FUb3f)V@Srm zw>KAZF(~k`9{Bs;KU;9J#tVldvk!jY5f?M-DcZ@j;QnJ{|7f{rR*)$`Fu_8QQH4RQ z-_0|RAIP1@jRF%}28J29*~C-V}>VGHmHaRt&q zurz(=c_77D666=m;PC858ivL>4nJa0`PlBg3pY5H=O z_8W}+T)gJtcEJ;XLYkf~jv*T7lYj8D^33RA=c(c0VdZ)AC4omMUEsMK+cP${4UZ-s dIv^{>P_SynnunQ7a)6o`JYD@<);T3K0RSpqFw+14 diff --git a/awesome/themes/themes/vt/layouts/tiletopw.png b/awesome/themes/themes/vt/layouts/tiletopw.png deleted file mode 100755 index daf965faaaaddca59ffeca4ba2a98c1b1951c95e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSjKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sf4Mu)00UpW7Yb!wN0(?STf%JbcD6UwV4CFAC1o;IsFqBO` zYXRgjCV9KNFm$lWdH^|=o-U3d7QM+4t!xq;+-rDPn?!jW7O*B|@}@REd|zuYkyWij uKtb8&fSHj&fvH2r+Q3FdZHKBi%nXb7ih8`2d0_)Igu&C*&t;ucLK6VF)i@9U diff --git a/awesome/themes/themes/vt/layouts/tilew.png b/awesome/themes/themes/vt/layouts/tilew.png deleted file mode 100755 index c722a358e0618163bbe1a936093d327ce2594d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;*FUZSUqV@Srm zw>J-RF$nN5T=@InKX}q?*?{7T;(~}TT&6DCeGD`12ClIz(>>1&G6V>0n5TrhFeJNv z|5;-KG~CAW6oZ)}kYVWH`(mLGM9l+!ho?`kJpUS6QgnQ=h}(~E0w8fuS3j3^P6P000>X1^@s6#OZ}&00004b3#c}2nYxW zd2z8Hj+`L9UQg2LG>t}MEh2;Ea(U|nQA(kdBAd<9YPAv(`2en+Ap7$9 zJe^KwE+TKhr4wXdu~;OEA~PC|UVw8a$i8y9{L}CE<2a6=fKw-kQVQSqsaC6BA~H^r zQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K5~rW#b#FTbqDFk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwVxBIJAr_~TfA}*P^a!vnP7vu~;$dKz X$MK&rzAi=usDi=M)z4*}Q$iB}5zjAs diff --git a/awesome/themes/themes/vt/taglist/squarew.png b/awesome/themes/themes/vt/taglist/squarew.png deleted file mode 100755 index 913f2ca6ba168e824644509d6fed72b31c677d49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!3HGtKUiJ>QjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K5~rW$n|Rx>tZgk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwGM+AuAr_~TfA}*PG;qo!WN03EeKyd5 d%Z(A}pyPS@6O*PM?E$J|@O1TaS?83{1OQ#WGiU$+ diff --git a/awesome/themes/themes/vt/tasklist/floating.png b/awesome/themes/themes/vt/tasklist/floating.png deleted file mode 100755 index f29e7f5a9a88b2792344da49b01b69d947002ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RTTHmlEFw9?wpokYtH#M2T~LZfo z*92^Mer#4?rRwc>IUX9fi*!GyTvy>Vwu-CSxnbQ4_sH9e1***6{uVjZJgtzqwEbP{ z1#zbxr3qo@=FB_OE^se(Ug(o6F_z`8Zp;pMKR4&aEHeW&Q`OMRMJux-udd=;DY*Yl k#Fiy5<3D>`d0N99QfGYPmE_VDKtC{ey85}Sb4q9e0NKlaX8-^I diff --git a/awesome/themes/themes/vt/tasklist/floatingw.png b/awesome/themes/themes/vt/tasklist/floatingw.png deleted file mode 100755 index eb802aeebfd3632131a4f00e3fa2e934d5306c54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RTTHmmFv8?4?(MLXst}5hc#~xw)x%B@E6*sfi`2DGKG8 zB^e6tp1uL$jeH=JnUcKST^JZv^(q?yd22mg977}|OAi`qw=goWJ@_t>60~WSh}hwi zS^Mh`6inP?AhB+<=k`r^7wiyimQOU5I6w_xk2}(ah#ma(7lPOE}mUT5V=(TeUgS_w=T=nLS0%9K4nPZ(N%cW2?IV X(dwl}PXAwnyusk<>gTe~DWM4fUetK} diff --git a/awesome/themes/themes/vt/titlebar/close_focus.png b/awesome/themes/themes/vt/titlebar/close_focus.png deleted file mode 100755 index a5b795849aad35f26a0386aee245f2b49a8d675c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 666 zcmV;L0%iS)P)LrSVSRJ3Y*v{1S}*~AOunfA~uR$#KKgm zQl+x8(DP3cmMDrSh=>F?>U~BroV~U;8EJ0L@vbSw1Yjf3OOVfkWu}!y){gzJxEQ z#eB{u!$W9kq!T|cXRvfY{Kb7`_y#x%)rA>oaTaR-cz1FUa4l#u$Ueu$XDZ{suI0-FQ!V`dmLv%rpv(fj6W70W>-Ia=N+M0K*(bI_%5$#+MB5>)f^PaeAU5D)RPfk|o5sPUgnyAW`W&{YCVcs+y=k>&YSNc?5!UxQ(v}~eF>lY=8oj4VFLpX#x07ORE!{{KIIz0%SU-l5rj!jz}r#iLmgbK_5Hl-DuV$gdKulb8Ga_VfJ< z9ABJY$6jP%e$%JA-|F|J&|v;|P6AG*56*wo=im{Z?B~Bln`eV@Q#MQO|C=jLojL1Z z%3$A;bwm6uCv(nyuMg_peX~y7$#gn@PW#RO4y#3_7FXB$XSX&TFj@FRu%(Hiu>avk z>sYgGA<2Fpl|S%Crfz%?;l;8yuT)NHxA?7yznedErHeC$@cwYJW9{Z*eNlSr<1(3Y z=hv-52?sZZ*s-!ODNb4Uz=4DDy{+u6wenmQYyyt@S|M=_+71g?-b{Rut-_piU8$69 z<_dGerxJVqPS_CQ%$U}=TqRR;lFd#t2OSoU=|Z0O?P}Gh2<~B4)Y*FdjS$DIqCKW9 zMhl)7YlbVmy!GenXU01cCAvZ1CjF_(7TCsnB8{tcLH7EP@GW&+p5`y2mfVY)^gKm- z>$+vU(pwYx_s!~hAd(sHd(Bt(@_)YFS2|n||C$U;iK->85hck*sfi`2x+y?{!N|bC zQWuDfj6)2~tc(n;OwF|o46FZhlH;S|zFm1M?6=11n=oD+5c223te1 zH$V-NARB`7(@M${i&7aJQ}UBi6+Ckj(^G>|6H_V+Po~-c6)||a`njxgN@xNAl7Ve| diff --git a/awesome/themes/themes/vt/titlebar/floating_focus_active.png b/awesome/themes/themes/vt/titlebar/floating_focus_active.png deleted file mode 100755 index 3447bb2e797aa7aaa0d801ca1177a1ea231a0484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598 zcmV-c0;&CpP)GY`6#5dKYoA>zk-ApQ@;_ZcF76#y~Z ziy$@-H-OZ**FFAUzWhHNmn{DEUnuz-NS_0y!J(hlGlYHl544~FZ)AWR5ccJ~YTnoX zp%eeZv0=r}|3LBimi)Ic!7 zWE1?#fFbC`f3UBh;Vz%||G#Y`0s|uvE(f&aKT!R9f(C;P4}6vYGF-j*|9|s3+*mvl zXhFb}_dxXqL>UY=-2XuWL%^f|iuwQl>sMf6;WVJ3e)rx3)fr%95Q2vL-bw&!{x6yJ zAMAP<=1v3}>T}~gP~HG*&LhfjpBq5K?|@whay>YFeQtoT1I{c>s^Q?Y4>2?WZ&^X2 k;q!4B3YH%&=xJ^+0CnFED5!2~q5uE@07*qoM6N<$f?snX`2YX_ diff --git a/awesome/themes/themes/vt/titlebar/floating_focus_inactive.png b/awesome/themes/themes/vt/titlebar/floating_focus_inactive.png deleted file mode 100755 index 8d724bffe2b89abb89a58307c90e65e6795ca7ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkEPcOPuD`*OhUlwY77vUJXr4OLJrD>+AFS zT2;IK`s>{2?E7k-MMmF_BuY%162vYoE&X%rR?{X0iP>3uI0OhL!6)}0 z>i0~JZCST|{pv)CN4wr}=qR}a9{Kt6r|qjUxsDZ)L)z4*}Q$iB}PLo~j diff --git a/awesome/themes/themes/vt/titlebar/floating_normal_active.png b/awesome/themes/themes/vt/titlebar/floating_normal_active.png deleted file mode 100755 index 21a67eee58dc38fe59fefc56730ad5ceb1402341..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkEiN$WeaiCOU+1%UJ9Th9U*nM-)WD*?g4OBm zN0nWHhtGTxWjJg+v&ZlF7w6`5zonrnw^liSzQ~?iTyi(}NmlX_ori`0Mf~F>Yv%3C zd|()`U(T4HCEY2L_r;rC#%s#9+*gp`kh$?{v-sgXGP`mgessw>w#N40%m-82mXw&8 z?+vZpboNb>?z1c&hWgNH*M6wal6rmdoa^aH?QHIq_Jy^MIi_F28#>po^f;yL!0Pj% zmLbjc-zLrpD}PBa={af^{(ICTmGAjR#k#EVNrIsI@-N*rr=2W!R6ezvB*gl(S7VFc zyX#eI2J4zGOWG)Bi%T7{{&#e}<+W#AyEJ0F|H{2TtbMKVQ;bNyb>wsk)UF+5szy6b)~=#4#|2Cw)DG9%ijmgR`-&%S~v67tl0_0 zvN@|Sg-t&YC%5@SSM8!Ji8577TW_y@JZt5l>4rtp0h`KmlUe7y>0k|;U$C3kVo?~! zdiUd}m%mvW$fahXdgD~nb}J?Wg+24;GFoin;H)aO(SBMZy>!A|mSPqK)fc+6AMX#^ zKEGh@pC9@etqPw1>n9|$|7TD?{ZSk*1|tIlOI;u` zG7d2`vobQYGBwvWFt9Q(;CR>R0n?D1pOTqYiK@ZCJjBqz%GlD%z!IXt)==yXPy>Uf LtDnm{r-UW|R2@W2 diff --git a/awesome/themes/themes/vt/titlebar/floating_normal_inactive.png b/awesome/themes/themes/vt/titlebar/floating_normal_inactive.png deleted file mode 100755 index ab0f89c76a4f3c375891bc98e961d07805f5b6b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 814 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE~>&VHY4#~ySZ_{&l$Pd*Ee>RZL8b zK%1h&gk>+EFJ8R(aN&l^aszw&d~U^SpKbC>cgLEUnMK6K$#K5;T6OQ;yLVNKFGgI9 z+HY-dKRwxa-SyXU8?L@Bdwce*Z`RgZH`eCm=NA_gOvqdt|9jv3ze4lo&i&dV5Y5fa zUA8pn;P=`|DvSp<>D+p2=I!l$<@MKz5BBc0?d$J9|LgC+bG8+^xo5?k_Auo*FvT}a zR^U)+cwWhOfiY~>*=2io?Xu$8w{Krsef@l$(`8Kx7Q4Bnd)*$hK46qTY*4d)%BQJ8 zhu3N@HClRQduM0o`k+(K|JMDVnK|o7q0b~05m!f<;~Go--1OG#oL(mI$XCSm;QMoz zOYf%5d(JTbkU`A)t6AG#@3LpOyhMZReCge1%}>7xzXJLpYFcZe1cOE2;VW0J6r6qe zQZqG@X+o-GYGm56FJHby{CM@sD|B^eU%sb_cn*3#_6IZ?tv}>ERq+xA6rz2)C4m&CQ5*0QzJvPrYcrd zR(eXbNnY@tq{2{P!ZYD{Wr9ST&!m(NZ_Um{91n75E&I3O&OerYM}03(@md)cDB_{X zXtyM@s;K;K{NB9GS#nux`PrKf>Q=pX6#8F3LA`xH^MyqQH`X%Vi~*)M)e_f;lH{V) z#FA9q6d=K1WME*a3q(f7A%_YnDIDh0x1W|)H}iJ{J*W}9s;s3yy z=aCWy28QYB>BnZf#ZW_)I{9JRSB7y(L_aC?tU|w1sP(O62J6e|tFPc@!&%Jc-??o( z$_?EU7(}e+)pz$qDn+y^`mw1}s9Bw~uWx|v?ps(aU09pyXl?zOj;%?2p-ON@B<`N* z36Zk8s33kwj^~eeR%6dvgDr18HjN*H?=E5}CxM||s}N|}OoW{)@8a39u;l^V zT7Q~Dgv$%2(f?*Bz3XSOTcLZrp?T`1ig9dmMQBQlfcK-hlMzA9oM~Ko*oR@Q5AKW* z%=sJ0o$Od;i4;|@Q0UGlacz&~WVk<{M+f3cyC2eLsk&!kK9s|b$-q}PN$}peVyt?6 z9?slV9GE+U<1xXwGNWLdDpj#&w4s)QG_ocNn>L8PofzDbDn-`9g^ctXao)JX{>Ne|jC_ci#3;Jojwdg`7mGIP z-)U(}Su{S}_=>D*+a3r#M_{mq?#APMxkU@k>y#}P@`I*36mr_K@liD`%W!7KkRRaV z*^BdjTdk9#p2`K#yBGRTj^a35a9u6nyLEC}0g;~5SvD`nxg%cHJ#c)~v+7p^rv#dD(b_fYZhg%cI#svrX)2lUOA5d3n}cz! zn8u8t-qTF=)J|v;F1#rE?o%PSn`hEnDO@iW8s88uCQF%0@EBM-Vbrq>FNouuMocP3 jm7*Gr=u{%7`h)!&401`p9ZAH400000NkvXXu0mjfjHK)| diff --git a/awesome/themes/themes/vt/titlebar/maximized_focus_inactive.png b/awesome/themes/themes/vt/titlebar/maximized_focus_inactive.png deleted file mode 100755 index e79dc1ea0f5d744f0912a146169d5a823c92cb67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1277 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmUzPnffIy#(^vlDyqr z82*9aYl$mOKoQOYkH}&m?E%JaC$sH9f@KAc=|CE69>blZFC!Qjm_K^DIEGl9UVG`h ze{iJ8fsgOA<1=-GRwqQv2vB1B=zhsgL5p#cm~Vszm-ewi*@Lk~6_gmld(v{mTGS;7&^Ca(_<g`uqEPyq zCMTETr0IIGT_vTZfiW>X#~&Zuq+>Mm%=v@9zP<;Y7Eahx_BQIttE;Pj)YyIcX~S^( z^y!@Z{MYt8@%w5lHCjBregEzr6&-!@Y0;C|J4=v7tENp;o&>(;M-&!+YLd5eHKJ3G7b#)zIA zv+m4UFLs?fcaG24*x082UyQg@$-b(uUeo{ahKi`hMMmC?jg39KGI;ris=Xqjq7%KA zu2`|+!1K?6At5b`G$h&%K6<3o>Eg6qM|<0b4GWm!>*FkB`mSHOQgVMsVY7om!~OT_ z0vro6rJg>0I%8R9YNU*H8P8#Zh=_;>Cnu{{=}qrmxoXur%XfcYv~r6-dVYTX`@HOI z<^=&73={m8M@B{}PCspEZr*)SSFLBRjiwK#kEcF(LbFcJc&7 zM@tvVEHA37tE&Ry^7_9*|TSN+|5&($T55NYz{@f7~kvDI~yAtK|WNT zq>^~s%zwV!(-#*PZ`r!_;rHL1txgPY-o2CC_4$8;yiLW0=U=P-%ScIewK*xawYOW= z{jr!kckYuS%aq7tg)&And2Z%>`~9H$`#awGcC}SIwr@9Ip~1B>qzmY_Q>RZG@-$c2 zoO|_3Ygy)`lPM9Akw499o}ZihqElG?mz9;(gw&Z&pQcJlNzIrw>(SfW+f{@(@0y(D zoPN6XvBjSH|MRBn$GoYu>alb*k3Jb`&yYiw&&l!H%TRv^8%yj5AGQfva+$i zeA-(_P^)Hw5nzVr>foh3sL`iZ{YGO&MZVHfKFfuT()CD3V;}AnLD8U}fi7AzZCsS>JiWody{an^LB{Ts5`ff(y diff --git a/awesome/themes/themes/vt/titlebar/maximized_normal_active.png b/awesome/themes/themes/vt/titlebar/maximized_normal_active.png deleted file mode 100755 index 7765759edef127c01675c0e073dbe43de436ff7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 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 diff --git a/awesome/themes/themes/vt/titlebar/ontop_normal_active.png b/awesome/themes/themes/vt/titlebar/ontop_normal_active.png deleted file mode 100755 index fc6089517060a44a12c8690b5ae56bab11b0130d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmT$6^TbY*8=%$N#5=* z4F5pzwZxSspa^GyM`SUO_5fqIli7A4!LkC!bRZ2jkKxYImk|sMOglYY978Nlubpz% zJ0wuzSpD_c*EjC5Dlsn5Sb6qFyRfTZtp`_X*dsL_WvPG3HsS2U2OQRHyL;qT{vwf$yv*LNC7+j?y=gSFng61#;ci~p#g4NZ zBeVRT8A@+l-oGjPZo~`C<=~^DU#&&F_3-*qgM`w0*_ zKBepPmC|20u3Ov~#;n@t!JM7D#O^=IetN1M$>#JNPor=2|a z(MStT>@vA!a7nVhxm{lV^t>?a&h>e^i!zZOc#TToj z4Hi0w@v{gxhy@)su;lXkoS|{J=i}~wi>I&nV43)RcG%fQt%q_Sjw+PK8-Hc+*I3qO zbmmXwz5JbbEe&}_m#?pCAs70+4LO;F*IJg~Ol(}dFvAu9h`nR2wm-LmFXaYwAN z=`GNBp&PEvA7=3^t6*Nj@3NK2*%mK!k4G4Hy;OE_+R74tSZM-_DfjwEACiQw9H098 z{Q-ZD=z`@lPt*&0cM5YcaywqSB2*L6v`FQh=8SIP+jlvBM};3tbW-z}yN*MwYg&L{ z-Li+JjGvgoHRZn7aP)jHn@}_J>5pjf<;l_}GZjR29rh?iG#f{^sCKHWp7-CcZTe-o z2eb0w+nv43EM?Xm{B&BU;B3#*LvcYWCU@S>(QI9J?dtj?ThmhRDJy=xrT;}db-S^R zv)E!uV2V~Pag8WRE=o--N!3jO5)4KL29~-&WMmv-Xl7+(Xk}`yZD3$!V8HRN6O<>w z8glbfGSeziH5izO7#dg^TUr@dLNwSKioF49kObKfoS#-wo>-L1;Fyx1l&avFo0y&& Yl$w}QS$Hzl2B?U^)78&qol`;+0Edc{S^xk5 diff --git a/awesome/themes/themes/vt/titlebar/ontop_normal_inactive.png b/awesome/themes/themes/vt/titlebar/ontop_normal_inactive.png deleted file mode 100755 index cb2dd7fec00192962b562e4edf1c48403a730dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1073 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmT$6^TbY*8=%$N#5=* zKpF^sI`6IrQk(@Ik;OpT1B~5HX4`=T%L*LRfi&1WhC4@JMldiit9rUPhFF|lJLSB$ zvZu)L{kg}zq&U}|Tj&EpX0O zMP?_K(ht|Ad;&Ztlz8}*?pDvYtM8Re|;s*RFjDw4IKqlRZ^@U z{@xW`9<);Mu)&{csft3K2Ml=rKYH}&#O{M$EBiM_@C11Y2tN8~(edK(?gOV!pRS9& z-Y(qflCC?`$Ladlhd+N-{+}(k{Bq|0pi}-XXG-rX2s&~kaw-0q=<&p}Y29lHS=plx zA3l6vTwL5Iu*k_}LQq&|hqvZjAGOCBFH3$IGq5l*3JA8fwLSP+bx^_?=u8V4HbL9Q z>{)G_Hyg{y%O5V3x$?SnikGT~ruAla2fyoIXTE%yIb#{8A`3%F!rQXl*{i3e9^ACX zPrTQS+1lEAMTpjeInPZPBI4uwcdfG)?mup5X7=scP8&`or^Oc?%x1glO>Yj;ntuLy zea3&zYuBzVa_V?lVRO!DVZiwdReSrK7B=kNYwPE7|I^Pu{0tZ5xPw=QOz8O6aWv_S z$=UFQ>s~LqnX@QD=g_uXKbQF8oiSUBPxK$%mb+a|UEO||?c1jqose)|eYNT;-(drVr95S~s|DYDthkV4#`vfDX$ObheE!-zeCce!AOmm9w+`D(k+@o6J8c~v5l$uzQs+$5N7>o=IEOmj%$T-B%%*x2f%E(yTz`)ADKsHz& zm`foVa`RI%(<%vQaC($k3e+G8vLQG>t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU38N O5re0zpUXO@geCyDxyW_^ diff --git a/awesome/themes/themes/vt/titlebar/sticky_focus_active.png b/awesome/themes/themes/vt/titlebar/sticky_focus_active.png deleted file mode 100755 index 1106399d777ad671051f94a7f15f0e1addfacb78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSx;P)f@kD}&@elCK z!KfEO!9>j-jI!Bv$U<28F;v)`0CQ>uJ@_$d*AA(M1^mW)? zd1K{LGiuak_oZ2Czx(am4@RGi2hYpZl*C(yj-5Mq;`}>SECz#}SvW2LD|3NE73nNb zu~>{0U^M|ZqDE6XnE`ix*Fh6DO6R5*=;7*|7VYp$uRC zaq<4faD8V&QJ@3@z(Zv#_(H$kJ@L`Ihu>SY-ePlu^%mz{QNAU!>7LtQFkIWY#(KQo zk!9&f2%QbC{7(b)9fEzLVHTsh)!^^CV*N{*Os7zWgabp6ffD7nxHuhPbJq3Bo zt{Zb>G+^W52EX6^m3#Icq6HNyCZe7|C&2x1Jm_C;U43-192%bo@O2d)&#E3`OqS8o5v3&R!gXQ-SWSX84@oMx9(-utsCe9@k#p1_e{DLDQt zc;!}Q)q7c!z(b&rV0vDl9;nY$+1PBKZCwZss*k5*G>AA*JwUBi=h4m4H`h-OKAh{% z3vxAmZbmJ-afiitiF(*zGuoVgx={?Udf1?!^ywviI<*e1sKtYDyHYBOmxy-Urd#XM zOZvQ0f0gCtYs6u#GQVP=5jJT>Ef%VabZZ^@^+WWM9?EWhVek;S00000 LNkvXXu0mjfSX_`J diff --git a/awesome/themes/themes/vt/titlebar/sticky_focus_inactive.png b/awesome/themes/themes/vt/titlebar/sticky_focus_inactive.png deleted file mode 100755 index 783df6932e07e6072e58c3dd9e97bfb5bcd331dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%b@U_I1CZGssfk$L9 zkoEv$x0Bg+Ai=T%$8;bK*3WR~=*tKO1||nEwdiCme>!SMRtO(J% z|N84M>9wXkhO;XfAG~!;I3_VY=#WIS?~d2Ic5dC-eN4jZVCFLRCy_tw6LOl2J3Cvzt3_UY(dz#A+oarHr+mhH9stZraa#C&%pnx8Hw% zN~J_@(BXDzxta5=Ib3Thzq-1*>RQt&K>=R2S(lb2CG%A6m3#O8eZTk8ONPlj+j5m_ zZ*A+nefxH~OoQrD7p`kj_NR0T%w{jV{4&8n;=s1ITQB8`6)m0O8Jf$Sz4qe!?}f$1 z%@;Gagl*OTQMA(}azPN6=Ol%`WS(~ClHIX7V%=Y#r`g^Wbz!;pvPA4`nsBQVV|jUb z$76}dA1kVt7bo~1I3`hATf4XX^S+&D<zyVaXNTW$W>AU{PSQVwSmhA#eeUI1F>WOtv2zqudeqEC0)9Vilet3CF`YaEY zJ8sB-c!IZP=*kQ8gHthZq`I8CzNzSVA<|8j8IEYLEok t5S*V@Ql40p$^Z;gz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RWF}UdaFe diff --git a/awesome/themes/themes/vt/titlebar/sticky_normal_active.png b/awesome/themes/themes/vt/titlebar/sticky_normal_active.png deleted file mode 100755 index ea1f2a653cfc5eb4cb7d33631f6ca55e32944529..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%b@U_I1CZGssfk$L9 zkoEv$x0Bg+Ai=T%$8;bK*3WR~=*tKO2By=VE{-7(yTGRa$o@5wn%&L`%Mdl(;a7O`{kSr$6&JkZLq#HEATWuIl7`a#F8Yo2fJ z{=9tk@@1KA*K-u)RCd3*Amw}g`u;rRy8>?4|i==hA1@G>X>Rlme;mf{C zdz7Tam-$-Is(}*QPFW*xsaYCF9kCV+vc| z@g!V#P@H<*y8U{G(1y7&A)g|Pa$i4Fzs_E`%tt%o`mSkgm(5!C#ua>Bn|;wfVZYYd zx4XB$Uc6t8t$`t+F4xiand6R~|IY26A9wRr_Uenv+@gCoKDvB8q_lH^psJki9s3>U zFJ4k9d_QplgWv>)T6V(^b8m4JHfs4cM);QFZjpLe%r>3_b=hoH#V%Jw|Hx9kHXTtFnM_-*g zu0BXD;d~*%=OGA9ucng;PngQTDJ@Qv%F=#{oOq!|Kh$= z%E!(h7n%HN|8^d31ODfx1y2u3+_`s8`QPW?)C(<2q7Q%O%2-kVz& z`?n$~C;hulN%#%^NGYBODV>Q&I3NFWydZkpR{IYF_u~mRrz1{=TTEX&LEX|drljxe zx!~v1mT?}=IgwR2ulw}toHcm@M?c;?kSH@rg|l*2v0{8`?NeW~aDCzSi;@TUu5&Xz z(olN4oM*CP_D!jL{rE#>cbRwYJ|?<<=H0ZPAAYLjZ94uc^_$U+v+l3@e%`aaRrkp| z{KfsF;q6ruSK8$O)3|DhYeY$MQEFmIs%{F9U@$T;u+#-2BjXT5Gb9nO2Fa!N5Gk(7?*r(#pURqQTZs>;M1& diff --git a/awesome/themes/themes/vt/titlebar/sticky_normal_inactive.png b/awesome/themes/themes/vt/titlebar/sticky_normal_inactive.png deleted file mode 100755 index aabb54ac3f2508235b8bfeb323e0209967fcf3f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE(}6TtKf|4)FC!Qjm~uQ_978NlFP(DQJK9m==y{uW*#`UuY@#tD zn>NlCTN1D#cGchNKgaJ}b=|$WG??2dT+8LLQlR0-wiVwE*X!NlG&EDb$}B&;xVrs&_udWha@1s9 z`*p{ZAbG}`I~4kC#NKDSl{}ex9sTyea731 zG~~Wqmtamlb6O~S?Zc`!L4Jp7m7=4g^Uci7?;k7lnG&?2o@K46MDmuaS*(|J4UQ$0 zmz(e3w{IGQ1Bc}FtzyjwABe|CMrN*EzurB_Yf37o=F?`)6Pt48T*xh`s^W6;*t27Y zMDe+U63zlF59Tx%_Z>cbIQ&kOch{l@X6>a4OKVKFACp*;*|m7F@{&xhV-hj9PO39R zWFMRwWOmvpW9{(=FRkqD-FM$TR$$TMZNWQxp4z#rAHmIR2f zN+c)roNe(v6~%q;WyzCs=lEI#cI@8my#N03w{PE0em3*+hwltKuictAcdl*bhu-TY z^OsJUHa+!cu8GuM=7i<^3=Ug^R+{`{mFHorO+GUr$V$$1`}x0r|MEZj-F)rZHM=WW zTd(K&YPyQJdQ4)OK7IPzy?ghr-@M2Fo~U12D?NY%?PN}v7C RMhd8i!PC{xWt~$(698P-aqIv9 diff --git a/awesome/themes/themes/default/background.png b/awesome/themes/vt/background.png similarity index 100% rename from awesome/themes/themes/default/background.png rename to awesome/themes/vt/background.png diff --git a/awesome/themes/themes/default/layouts/fairh.png b/awesome/themes/vt/layouts/fairh.png similarity index 100% rename from awesome/themes/themes/default/layouts/fairh.png rename to awesome/themes/vt/layouts/fairh.png diff --git a/awesome/themes/themes/default/layouts/fairhw.png b/awesome/themes/vt/layouts/fairhw.png similarity index 100% rename from awesome/themes/themes/default/layouts/fairhw.png rename to awesome/themes/vt/layouts/fairhw.png diff --git a/awesome/themes/themes/default/layouts/fairv.png b/awesome/themes/vt/layouts/fairv.png similarity index 100% rename from awesome/themes/themes/default/layouts/fairv.png rename to awesome/themes/vt/layouts/fairv.png diff --git a/awesome/themes/themes/default/layouts/fairvw.png b/awesome/themes/vt/layouts/fairvw.png similarity index 100% rename from awesome/themes/themes/default/layouts/fairvw.png rename to awesome/themes/vt/layouts/fairvw.png diff --git a/awesome/themes/themes/default/layouts/floating.png b/awesome/themes/vt/layouts/floating.png similarity index 100% rename from awesome/themes/themes/default/layouts/floating.png rename to awesome/themes/vt/layouts/floating.png diff --git a/awesome/themes/themes/default/layouts/floatingw.png b/awesome/themes/vt/layouts/floatingw.png similarity index 100% rename from awesome/themes/themes/default/layouts/floatingw.png rename to awesome/themes/vt/layouts/floatingw.png diff --git a/awesome/themes/themes/default/layouts/fullscreen.png b/awesome/themes/vt/layouts/fullscreen.png similarity index 100% rename from awesome/themes/themes/default/layouts/fullscreen.png rename to awesome/themes/vt/layouts/fullscreen.png diff --git a/awesome/themes/themes/default/layouts/fullscreenw.png b/awesome/themes/vt/layouts/fullscreenw.png similarity index 100% rename from awesome/themes/themes/default/layouts/fullscreenw.png rename to awesome/themes/vt/layouts/fullscreenw.png diff --git a/awesome/themes/themes/default/layouts/magnifier.png b/awesome/themes/vt/layouts/magnifier.png similarity index 100% rename from awesome/themes/themes/default/layouts/magnifier.png rename to awesome/themes/vt/layouts/magnifier.png diff --git a/awesome/themes/themes/default/layouts/magnifierw.png b/awesome/themes/vt/layouts/magnifierw.png similarity index 100% rename from awesome/themes/themes/default/layouts/magnifierw.png rename to awesome/themes/vt/layouts/magnifierw.png diff --git a/awesome/themes/themes/default/layouts/max.png b/awesome/themes/vt/layouts/max.png similarity index 100% rename from awesome/themes/themes/default/layouts/max.png rename to awesome/themes/vt/layouts/max.png diff --git a/awesome/themes/themes/default/layouts/maxw.png b/awesome/themes/vt/layouts/maxw.png similarity index 100% rename from awesome/themes/themes/default/layouts/maxw.png rename to awesome/themes/vt/layouts/maxw.png diff --git a/awesome/themes/themes/default/layouts/tile.png b/awesome/themes/vt/layouts/tile.png similarity index 100% rename from awesome/themes/themes/default/layouts/tile.png rename to awesome/themes/vt/layouts/tile.png diff --git a/awesome/themes/themes/default/layouts/tilebottom.png b/awesome/themes/vt/layouts/tilebottom.png similarity index 100% rename from awesome/themes/themes/default/layouts/tilebottom.png rename to awesome/themes/vt/layouts/tilebottom.png diff --git a/awesome/themes/themes/default/layouts/tilebottomw.png b/awesome/themes/vt/layouts/tilebottomw.png similarity index 100% rename from awesome/themes/themes/default/layouts/tilebottomw.png rename to awesome/themes/vt/layouts/tilebottomw.png diff --git a/awesome/themes/themes/default/layouts/tileleft.png b/awesome/themes/vt/layouts/tileleft.png similarity index 100% rename from awesome/themes/themes/default/layouts/tileleft.png rename to awesome/themes/vt/layouts/tileleft.png diff --git a/awesome/themes/themes/default/layouts/tileleftw.png b/awesome/themes/vt/layouts/tileleftw.png similarity index 100% rename from awesome/themes/themes/default/layouts/tileleftw.png rename to awesome/themes/vt/layouts/tileleftw.png diff --git a/awesome/themes/themes/default/layouts/tiletop.png b/awesome/themes/vt/layouts/tiletop.png similarity index 100% rename from awesome/themes/themes/default/layouts/tiletop.png rename to awesome/themes/vt/layouts/tiletop.png diff --git a/awesome/themes/themes/default/layouts/tiletopw.png b/awesome/themes/vt/layouts/tiletopw.png similarity index 100% rename from awesome/themes/themes/default/layouts/tiletopw.png rename to awesome/themes/vt/layouts/tiletopw.png diff --git a/awesome/themes/themes/default/layouts/tilew.png b/awesome/themes/vt/layouts/tilew.png similarity index 100% rename from awesome/themes/themes/default/layouts/tilew.png rename to awesome/themes/vt/layouts/tilew.png diff --git a/awesome/themes/themes/default/submenu.png b/awesome/themes/vt/submenu.png similarity index 100% rename from awesome/themes/themes/default/submenu.png rename to awesome/themes/vt/submenu.png diff --git a/awesome/themes/themes/default/taglist/squarefw.png b/awesome/themes/vt/taglist/squarefw.png similarity index 100% rename from awesome/themes/themes/default/taglist/squarefw.png rename to awesome/themes/vt/taglist/squarefw.png diff --git a/awesome/themes/themes/default/taglist/squarew.png b/awesome/themes/vt/taglist/squarew.png similarity index 100% rename from awesome/themes/themes/default/taglist/squarew.png rename to awesome/themes/vt/taglist/squarew.png diff --git a/awesome/themes/themes/default/tasklist/floating.png b/awesome/themes/vt/tasklist/floating.png similarity index 100% rename from awesome/themes/themes/default/tasklist/floating.png rename to awesome/themes/vt/tasklist/floating.png diff --git a/awesome/themes/themes/default/tasklist/floatingw.png b/awesome/themes/vt/tasklist/floatingw.png similarity index 100% rename from awesome/themes/themes/default/tasklist/floatingw.png rename to awesome/themes/vt/tasklist/floatingw.png diff --git a/awesome/themes/themes/vt/theme.lua b/awesome/themes/vt/theme.lua similarity index 100% rename from awesome/themes/themes/vt/theme.lua rename to awesome/themes/vt/theme.lua diff --git a/awesome/themes/themes/default/titlebar/close_focus.png b/awesome/themes/vt/titlebar/close_focus.png similarity index 100% rename from awesome/themes/themes/default/titlebar/close_focus.png rename to awesome/themes/vt/titlebar/close_focus.png diff --git a/awesome/themes/themes/default/titlebar/close_normal.png b/awesome/themes/vt/titlebar/close_normal.png similarity index 100% rename from awesome/themes/themes/default/titlebar/close_normal.png rename to awesome/themes/vt/titlebar/close_normal.png diff --git a/awesome/themes/themes/default/titlebar/floating_focus_active.png b/awesome/themes/vt/titlebar/floating_focus_active.png similarity index 100% rename from awesome/themes/themes/default/titlebar/floating_focus_active.png rename to awesome/themes/vt/titlebar/floating_focus_active.png diff --git a/awesome/themes/themes/default/titlebar/floating_focus_inactive.png b/awesome/themes/vt/titlebar/floating_focus_inactive.png similarity index 100% rename from awesome/themes/themes/default/titlebar/floating_focus_inactive.png rename to awesome/themes/vt/titlebar/floating_focus_inactive.png diff --git a/awesome/themes/themes/default/titlebar/floating_normal_active.png b/awesome/themes/vt/titlebar/floating_normal_active.png similarity index 100% rename from awesome/themes/themes/default/titlebar/floating_normal_active.png rename to awesome/themes/vt/titlebar/floating_normal_active.png diff --git a/awesome/themes/themes/default/titlebar/floating_normal_inactive.png b/awesome/themes/vt/titlebar/floating_normal_inactive.png similarity index 100% rename from awesome/themes/themes/default/titlebar/floating_normal_inactive.png rename to awesome/themes/vt/titlebar/floating_normal_inactive.png diff --git a/awesome/themes/themes/default/titlebar/maximized_focus_active.png b/awesome/themes/vt/titlebar/maximized_focus_active.png similarity index 100% rename from awesome/themes/themes/default/titlebar/maximized_focus_active.png rename to awesome/themes/vt/titlebar/maximized_focus_active.png diff --git a/awesome/themes/themes/default/titlebar/maximized_focus_inactive.png b/awesome/themes/vt/titlebar/maximized_focus_inactive.png similarity index 100% rename from awesome/themes/themes/default/titlebar/maximized_focus_inactive.png rename to awesome/themes/vt/titlebar/maximized_focus_inactive.png diff --git a/awesome/themes/themes/default/titlebar/maximized_normal_active.png b/awesome/themes/vt/titlebar/maximized_normal_active.png similarity index 100% rename from awesome/themes/themes/default/titlebar/maximized_normal_active.png rename to awesome/themes/vt/titlebar/maximized_normal_active.png diff --git a/awesome/themes/themes/default/titlebar/maximized_normal_inactive.png b/awesome/themes/vt/titlebar/maximized_normal_inactive.png similarity index 100% rename from awesome/themes/themes/default/titlebar/maximized_normal_inactive.png rename to awesome/themes/vt/titlebar/maximized_normal_inactive.png diff --git a/awesome/themes/themes/default/titlebar/ontop_focus_active.png b/awesome/themes/vt/titlebar/ontop_focus_active.png similarity index 100% rename from awesome/themes/themes/default/titlebar/ontop_focus_active.png rename to awesome/themes/vt/titlebar/ontop_focus_active.png diff --git a/awesome/themes/themes/default/titlebar/ontop_focus_inactive.png b/awesome/themes/vt/titlebar/ontop_focus_inactive.png similarity index 100% rename from awesome/themes/themes/default/titlebar/ontop_focus_inactive.png rename to awesome/themes/vt/titlebar/ontop_focus_inactive.png diff --git a/awesome/themes/themes/default/titlebar/ontop_normal_active.png b/awesome/themes/vt/titlebar/ontop_normal_active.png similarity index 100% rename from awesome/themes/themes/default/titlebar/ontop_normal_active.png rename to awesome/themes/vt/titlebar/ontop_normal_active.png diff --git a/awesome/themes/themes/default/titlebar/ontop_normal_inactive.png b/awesome/themes/vt/titlebar/ontop_normal_inactive.png similarity index 100% rename from awesome/themes/themes/default/titlebar/ontop_normal_inactive.png rename to awesome/themes/vt/titlebar/ontop_normal_inactive.png diff --git a/awesome/themes/themes/default/titlebar/sticky_focus_active.png b/awesome/themes/vt/titlebar/sticky_focus_active.png similarity index 100% rename from awesome/themes/themes/default/titlebar/sticky_focus_active.png rename to awesome/themes/vt/titlebar/sticky_focus_active.png diff --git a/awesome/themes/themes/default/titlebar/sticky_focus_inactive.png b/awesome/themes/vt/titlebar/sticky_focus_inactive.png similarity index 100% rename from awesome/themes/themes/default/titlebar/sticky_focus_inactive.png rename to awesome/themes/vt/titlebar/sticky_focus_inactive.png diff --git a/awesome/themes/themes/default/titlebar/sticky_normal_active.png b/awesome/themes/vt/titlebar/sticky_normal_active.png similarity index 100% rename from awesome/themes/themes/default/titlebar/sticky_normal_active.png rename to awesome/themes/vt/titlebar/sticky_normal_active.png diff --git a/awesome/themes/themes/default/titlebar/sticky_normal_inactive.png b/awesome/themes/vt/titlebar/sticky_normal_inactive.png similarity index 100% rename from awesome/themes/themes/default/titlebar/sticky_normal_inactive.png rename to awesome/themes/vt/titlebar/sticky_normal_inactive.png diff --git a/awesome/themes/themes/vt/xmms2/next.png b/awesome/themes/vt/xmms2/next.png similarity index 100% rename from awesome/themes/themes/vt/xmms2/next.png rename to awesome/themes/vt/xmms2/next.png diff --git a/awesome/themes/themes/vt/xmms2/pause.png b/awesome/themes/vt/xmms2/pause.png similarity index 100% rename from awesome/themes/themes/vt/xmms2/pause.png rename to awesome/themes/vt/xmms2/pause.png diff --git a/awesome/themes/themes/vt/xmms2/play.png b/awesome/themes/vt/xmms2/play.png similarity index 100% rename from awesome/themes/themes/vt/xmms2/play.png rename to awesome/themes/vt/xmms2/play.png diff --git a/awesome/themes/themes/vt/xmms2/previous.png b/awesome/themes/vt/xmms2/previous.png similarity index 100% rename from awesome/themes/themes/vt/xmms2/previous.png rename to awesome/themes/vt/xmms2/previous.png diff --git a/awesome/themes/themes/vt/xmms2/stop.png b/awesome/themes/vt/xmms2/stop.png similarity index 100% rename from awesome/themes/themes/vt/xmms2/stop.png rename to awesome/themes/vt/xmms2/stop.png From ba7e553faec2ace1f3d2d0f6d7455214986b66a6 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 27 Jul 2010 23:54:13 +0200 Subject: [PATCH 16/24] Fixed awesome rc for fedora --- awesome/rc.lua | 9 ++++----- awesome/themes/default/theme.lua | 12 ++++++------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/awesome/rc.lua b/awesome/rc.lua index cedefc8..0c6ce86 100644 --- a/awesome/rc.lua +++ b/awesome/rc.lua @@ -6,11 +6,10 @@ require("awful.rules") require("beautiful") -- Notification library require("naughty") -require("vicious") - +--require("vicious") -- {{{ Variable definitions -- Themes define colours, icons, and wallpapers -beautiful.init(".config/awesome/themes/default/theme.lua") +beautiful.init("/home/slash/.config/awesome/themes/default/theme.lua") -- This is used later as the default terminal and editor to run. terminal = "urxvt" @@ -74,8 +73,8 @@ mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon), mytextclock = awful.widget.textclock({ align = "right" }) -- Create Network usage widget -netwidget = widget({ type = "textbox" }) -vicious.register(netwidget, vicious.net, "down:${eth0 down_kb} up:${eth0 up_kb}") +--netwidget = widget({ type = "textbox" }) +--vicious.register(netwidget, vicious.net, "down:${eth0 down_kb} up:${eth0 up_kb}") -- Create a systray mysystray = widget({ type = "systray" }) diff --git a/awesome/themes/default/theme.lua b/awesome/themes/default/theme.lua index c9e9150..02d5757 100644 --- a/awesome/themes/default/theme.lua +++ b/awesome/themes/default/theme.lua @@ -72,7 +72,7 @@ theme.titlebar_maximized_button_normal_active = "/usr/share/awesome/themes/defau theme.titlebar_maximized_button_focus_active = "/usr/share/awesome/themes/default/titlebar/maximized_focus_active.png" -- You can use your own command to set your wallpaper -theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" } +--theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" } -- You can use your own layout icons like this: theme.layout_fairh = "/usr/share/awesome/themes/default/layouts/fairhw.png" @@ -88,11 +88,11 @@ theme.layout_tiletop = "/usr/share/awesome/themes/default/layouts/tiletopw.png" theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png" -theme.xmms2_play_icon = "/home/tom/.config/awesome/themes/default/xmms2/play.png" -theme.xmms2_pause_icon = "/home/tom/.config/awesome/themes/default/xmms2/pause.png" -theme.xmms2_next_icon = "/home/tom/.config/awesome/themes/default/xmms2/next.png" -theme.xmms2_previous_icon = "/home/tom/.config/awesome/themes/default/xmms2/previous.png" -theme.xmms2_stop_icon = "/home/tom/.config/awesome/themes/default/xmms2/stop.png" +theme.xmms2_play_icon = ".config/awesome/themes/default/xmms2/play.png" +theme.xmms2_pause_icon = ".config/awesome/themes/default/xmms2/pause.png" +theme.xmms2_next_icon = ".config/awesome/themes/default/xmms2/next.png" +theme.xmms2_previous_icon = ".config/awesome/themes/default/xmms2/previous.png" +theme.xmms2_stop_icon = ".config/awesome/themes/default/xmms2/stop.png" return theme -- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 From 093106a7d3157bf56630443f548add85d0e3f8d4 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Wed, 28 Jul 2010 00:16:50 +0200 Subject: [PATCH 17/24] fixed awesome theme --- awesome/rc.lua | 2 +- awesome/themes/default/theme.lua | 83 ++++++++++++++++---------------- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/awesome/rc.lua b/awesome/rc.lua index 0c6ce86..b7e1cb0 100644 --- a/awesome/rc.lua +++ b/awesome/rc.lua @@ -9,7 +9,7 @@ require("naughty") --require("vicious") -- {{{ Variable definitions -- Themes define colours, icons, and wallpapers -beautiful.init("/home/slash/.config/awesome/themes/default/theme.lua") +beautiful.init(os.getenv("HOME") .. "/.config/awesome/themes/default/theme.lua") -- This is used later as the default terminal and editor to run. terminal = "urxvt" diff --git a/awesome/themes/default/theme.lua b/awesome/themes/default/theme.lua index 02d5757..63711b5 100644 --- a/awesome/themes/default/theme.lua +++ b/awesome/themes/default/theme.lua @@ -1,3 +1,4 @@ +base_loc = os.getenv("HOME") .. "/.config/awesome/themes/default/" --------------------------- -- Default awesome theme -- --------------------------- @@ -14,7 +15,7 @@ theme.bg_minimize = "#444444" theme.fg_normal = "#aaaaaa" theme.fg_focus = "#ffffff" theme.fg_urgent = "#ffffff" -theme.fg_minimize = "#ffffff" +theme.fg_minimize = "#ffffff" theme.border_width = "1" theme.border_normal = "#000000" @@ -30,17 +31,17 @@ theme.border_marked = "#91231c" --taglist_bg_focus = #ff0000 -- Display the taglist squares -theme.taglist_squares_sel = "/usr/share/awesome/themes/default/taglist/squarefw.png" -theme.taglist_squares_unsel = "/usr/share/awesome/themes/default/taglist/squarew.png" +theme.taglist_squares_sel = base_loc .. "taglist/squarefw.png" +theme.taglist_squares_unsel = base_loc .. "taglist/squarew.png" -theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png" +theme.tasklist_floating_icon = base_loc .. "tasklist/floatingw.png" -- Variables set for theming menu -- menu_[bg|fg]_[normal|focus] -- menu_[border_color|border_width] -theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png" -theme.menu_height = "15" -theme.menu_width = "100" +theme.menu_submenu_icon = base_loc .. "submenu.png" +theme.menu_height = "15" +theme.menu_width = "100" -- You can add as many variables as -- you wish and access them by using @@ -48,51 +49,51 @@ theme.menu_width = "100" --bg_widget = #cc0000 -- Define the image to load -theme.titlebar_close_button_normal = "/usr/share/awesome/themes/default/titlebar/close_normal.png" -theme.titlebar_close_button_focus = "/usr/share/awesome/themes/default/titlebar/close_focus.png" +theme.titlebar_close_button_normal = base_loc .. "titlebar/close_normal.png" +theme.titlebar_close_button_focus = base_loc .. "titlebar/close_focus.png" -theme.titlebar_ontop_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_normal_inactive.png" -theme.titlebar_ontop_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_focus_inactive.png" -theme.titlebar_ontop_button_normal_active = "/usr/share/awesome/themes/default/titlebar/ontop_normal_active.png" -theme.titlebar_ontop_button_focus_active = "/usr/share/awesome/themes/default/titlebar/ontop_focus_active.png" +theme.titlebar_ontop_button_normal_inactive = base_loc .. "titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = base_loc .. "titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = base_loc .. "titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = base_loc .. "titlebar/ontop_focus_active.png" -theme.titlebar_sticky_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_normal_inactive.png" -theme.titlebar_sticky_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_focus_inactive.png" -theme.titlebar_sticky_button_normal_active = "/usr/share/awesome/themes/default/titlebar/sticky_normal_active.png" -theme.titlebar_sticky_button_focus_active = "/usr/share/awesome/themes/default/titlebar/sticky_focus_active.png" +theme.titlebar_sticky_button_normal_inactive = base_loc .. "titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = base_loc .. "titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = base_loc .. "titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = base_loc .. "titlebar/sticky_focus_active.png" -theme.titlebar_floating_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/floating_normal_inactive.png" -theme.titlebar_floating_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/floating_focus_inactive.png" -theme.titlebar_floating_button_normal_active = "/usr/share/awesome/themes/default/titlebar/floating_normal_active.png" -theme.titlebar_floating_button_focus_active = "/usr/share/awesome/themes/default/titlebar/floating_focus_active.png" +theme.titlebar_floating_button_normal_inactive = base_loc .. "titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = base_loc .. "titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = base_loc .. "titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = base_loc .. "titlebar/floating_focus_active.png" -theme.titlebar_maximized_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_normal_inactive.png" -theme.titlebar_maximized_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_focus_inactive.png" -theme.titlebar_maximized_button_normal_active = "/usr/share/awesome/themes/default/titlebar/maximized_normal_active.png" -theme.titlebar_maximized_button_focus_active = "/usr/share/awesome/themes/default/titlebar/maximized_focus_active.png" +theme.titlebar_maximized_button_normal_inactive = base_loc .. "titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = base_loc .. "titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = base_loc .. "titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = base_loc .. "titlebar/maximized_focus_active.png" -- You can use your own command to set your wallpaper --theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" } -- You can use your own layout icons like this: -theme.layout_fairh = "/usr/share/awesome/themes/default/layouts/fairhw.png" -theme.layout_fairv = "/usr/share/awesome/themes/default/layouts/fairvw.png" -theme.layout_floating = "/usr/share/awesome/themes/default/layouts/floatingw.png" -theme.layout_magnifier = "/usr/share/awesome/themes/default/layouts/magnifierw.png" -theme.layout_max = "/usr/share/awesome/themes/default/layouts/maxw.png" -theme.layout_fullscreen = "/usr/share/awesome/themes/default/layouts/fullscreenw.png" -theme.layout_tilebottom = "/usr/share/awesome/themes/default/layouts/tilebottomw.png" -theme.layout_tileleft = "/usr/share/awesome/themes/default/layouts/tileleftw.png" -theme.layout_tile = "/usr/share/awesome/themes/default/layouts/tilew.png" -theme.layout_tiletop = "/usr/share/awesome/themes/default/layouts/tiletopw.png" +theme.layout_fairh = base_loc .. "layouts/fairhw.png" +theme.layout_fairv = base_loc .. "layouts/fairvw.png" +theme.layout_floating = base_loc .. "layouts/floatingw.png" +theme.layout_magnifier = base_loc .. "layouts/magnifierw.png" +theme.layout_max = base_loc .. "layouts/maxw.png" +theme.layout_fullscreen = base_loc .. "layouts/fullscreenw.png" +theme.layout_tilebottom = base_loc .. "layouts/tilebottomw.png" +theme.layout_tileleft = base_loc .. "layouts/tileleftw.png" +theme.layout_tile = base_loc .. "layouts/tilew.png" +theme.layout_tiletop = base_loc .. "layouts/tiletopw.png" -theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png" +theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png" -theme.xmms2_play_icon = ".config/awesome/themes/default/xmms2/play.png" -theme.xmms2_pause_icon = ".config/awesome/themes/default/xmms2/pause.png" -theme.xmms2_next_icon = ".config/awesome/themes/default/xmms2/next.png" -theme.xmms2_previous_icon = ".config/awesome/themes/default/xmms2/previous.png" -theme.xmms2_stop_icon = ".config/awesome/themes/default/xmms2/stop.png" +theme.xmms2_play_icon = base_loc .. "xmms2/play.png" +theme.xmms2_pause_icon = base_loc .. "xmms2/pause.png" +theme.xmms2_next_icon = base_loc .. "xmms2/next.png" +theme.xmms2_previous_icon = base_loc .. "xmms2/previous.png" +theme.xmms2_stop_icon = base_loc .. "xmms2/stop.png" return theme -- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 From fd31357144b50992455478c12b74fd6175183571 Mon Sep 17 00:00:00 2001 From: ryuslash Date: Wed, 18 Aug 2010 12:35:13 +0200 Subject: [PATCH 18/24] Added ide-skel for testing --- .emacs | 4 + .emacs.d/ide-skel.el | 4016 ++++++++++++++++++++++++++++++++++++++++++ .emacs.d/tabbar.el | 1932 ++++++++++++++++++++ 3 files changed, 5952 insertions(+) create mode 100644 .emacs.d/ide-skel.el create mode 100644 .emacs.d/tabbar.el diff --git a/.emacs b/.emacs index c5696fc..ad18cb3 100644 --- a/.emacs +++ b/.emacs @@ -50,6 +50,10 @@ (add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict") (ac-config-default) +;; ide-skel +(require 'tabbar) +(require 'ide-skel) + (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. diff --git a/.emacs.d/ide-skel.el b/.emacs.d/ide-skel.el new file mode 100644 index 0000000..90be871 --- /dev/null +++ b/.emacs.d/ide-skel.el @@ -0,0 +1,4016 @@ +;; ide-skel.el --- IDE skeleton for Emacs Lisp hackers + +;; Copyright (C) 2008 Peter Karpiuk, Scott Tiger S.A. + +;; Author: Peter Karpiuk +;; Maintainer: Peter Karpiuk +;; Created: 24 Apr 2008 +;; Version 0.6.0 +;; Keywords: ide speedbar + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 2, or (at your +;; option) any later version. + +;; GNU Emacs 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 GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;;; Commentary: + +;; Ide-skel is a skeleton (or framework) of IDE for Emacs users. +;; Like Eclipse, it can be used as is with some predefined plugins +;; on board, but is designed to extend by Emacs Lisp programmers to +;; suite their own needs. Emacs 22 only, tested under Linux only +;; (under Windows ide-skel.el will rather not work, sorry). +;; +;; ** Configuration in .emacs +;; +;; (require 'ide-skel) +;; +;; ;; optional, but useful - see Emacs Manual +;; (partial-completion-mode) +;; (icomplete-mode) +;; +;; ;; for convenience +;; (global-set-key [f4] 'ide-skel-proj-find-files-by-regexp) +;; (global-set-key [f5] 'ide-skel-proj-grep-files-by-regexp) +;; (global-set-key [f10] 'ide-skel-toggle-left-view-window) +;; (global-set-key [f11] 'ide-skel-toggle-bottom-view-window) +;; (global-set-key [f12] 'ide-skel-toggle-right-view-window) +;; (global-set-key [C-next] 'tabbar-backward) +;; (global-set-key [C-prior] 'tabbar-forward) +;; +;; ** Side view windows +;; +;; Left and right view windows are "speedbars" - they are embedded +;; inside main Emacs frame and can be open/closed independently. +;; Right view window summarizes information related to the current +;; editor buffer - it can present content of such buffer in another +;; way (eg. Imenu tree), or show an extra panel for buffer major +;; mode operations (see SQL*Plus mode plugin example). Left view +;; window contains buffers such like buffer list (yet another, +;; popular way for switching buffers), filesystem/project browser +;; for easy navigation, or Info documentation browser, +;; or... whatever you wish. +;; +;; Side view windows are special - they cannot take focus and we can +;; operate on it only with mouse (!). Some window operations like +;; delete-other-windows (C-x 1) are slighty modified to treat side +;; view windows specially. +;; +;; ** Bottom view window +;; +;; Let auxiliary buffers (*shell*, *Messages*, *Help*, *Compilation* +;; and another buffers with '*' in name) pop up/show in bottom +;; window only. BUT, if you want, you can open any buffer in any +;; window (except side windows) as usual - that's only nice +;; heuristic, not pressure. +;; +;; Bottom view window remembers last selected buffer within it, so +;; if you close this window and open later, it will show you buffer +;; which you expect. +;; +;; ** Tabbars +;; +;; Ide-skel uses (great) tabbar.el package with some modifications: +;; +;; - there is no division into major mode groups (like in +;; Eclipse), +;; +;; - side view windows, bottom view window and editor windows have +;; different tabsets, +;; +;; - you can scroll tabs with mouse wheel, +;; +;; - the Home button in window left corner acts as window menu +;; (you can add your items to it in your plugin), +;; +;; - mouse-3 click on tab kills its buffer +;; +;; * Project +;; +;; Here, "project" means a directory tree checked out from CVS or +;; SVN. One project can contain source files of many types. When +;; we edit any project file, Emacs can easily find the project root +;; directory simply by looking at filesystem. +;; +;; So, we can execute many commands (grep, find, replace) on all +;; project source files or on all project source files of the same +;; type as file edited now (see Project menu). Ide-skel package +;; also automatically configures partial-completion-mode for project +;; edited now. +;; +;; There is no configuration for concrete projects needed (and +;; that's great advantage in my opinion). + +;; If you find this package useful, send me a postcard to address: +;; +;; Peter Karpiuk +;; Scott Tiger S.A. +;; ul. Gawinskiego 8 +;; 01-645 Warsaw +;; Poland + + +;; * Notes for Emacs Lisp hackers +;; +;; Each side window buffer should have: +;; +;; - name that begins with space, +;; +;; - tab label (string) - buffer local IDE-SKEL-TABBAR-TAB-LABEL +;; variable, +;; +;; - keep condition function (IDE-SKEL-KEEP-CONDITION-FUNCTION), +;; +;; - menu (IDE-SKEL-TABBAR-MENU-FUNCTION) - optional. +;; +;; Side window buffer is enabled (can be choosed by mouse click on +;; his tab) if it has buffer local variable IDE-SKEL-TABBAR-ENABLED +;; set to non-nil. There may be many live side window buffers, but +;; unavailable in current context ("context" means buffer edited in +;; editor window) if they have IDE-SKEL-TABBAR-ENABLED set to nil. +;; +;; Hiding side window operation disables all window buffers. "Show +;; side window" event handler should enable (and maybe create) side +;; window buffers based on current context. When you switch to +;; other buffer in editor window (switching the context), all side +;; window buffers for which keep condition function returns nil are +;; disabled. Handlers for EDITOR-BUFFER-CHANGED event should enable +;; (and maybe create) additional buffers based on current context. +;; +;; ** Side window events +;; +;; Event handlers should be implemented as an abnormal hook: +;; +;; ide-skel-side-view-window-functions +;; +;; It should be function with parameters +;; +;; - side: symbol LEFT or RIGHT +;; +;; - event-type: symbol for event: +;; SHOW/EDITOR-BUFFER-CHANGED/TAB-CHANGE/HIDE +;; +;; - list (optional): event parameters specific for event type. +;; +;; Events are send only for opened (existing and visible) windows. +;; +;; Hook functions are called in order until one of them returns +;; non-nil. +;; +;; *** Show +;; +;; After side window open. Event handler should enable (and maybe +;; create) buffers appropriate for current context. After event +;; handle, if no side window buffer is selected, there will be +;; selected one of them. No parameters. +;; +;; *** Editor Buffer Changed +;; +;; After editor buffer changed (aka context switch). +;; +;; Before event, buffers for which keep condition function returns +;; nil, are disabled. Event handler should enable (and maybe +;; create) buffers appropriate for new context. +;; +;; Parameters: before-buffer current-buffer. +;; +;; *** Tab Change +;; +;; Before side window buffer change (as result of mouse click on tab +;; or ide-skel-side-window-switch-to-buffer function call). +;; Parameters: current-buffer new-buffer +;; +;; *** Hide +;; +;; Before side window hiding. After event handling, all side window +;; buffers are disabled. +;; +;; *** Functions & vars +;; +;; In plugins, you can use variables with self-descriptive names: +;; +;; ide-skel-selected-frame +;; ide-skel-current-editor-window +;; ide-skel-current-editor-buffer +;; ide-skel-current-left-view-window +;; ide-skel-current-right-view-window +;; +;; Moreover, when user selects another buffer to edit, the +;; +;; ide-skel-editor-buffer-changed-hook +;; +;; hook is run. It is similar to "editor buffer changed" event, but +;; has no parameters and is run even when all side windows are +;; closed. +;; +;; **** Functions +;; +;; ide-skel-side-window-switch-to-buffer (side-window buffer) +;; Switch buffer in side window (please use only this function for +;; this operation). +;; +;; ide-skel-get-side-view-buffer-create (name side-sym tab-label +;; help-string keep-condition-function) +;; Create new buffer for side view window. NAME should begin with +;; space, side sym should be LEFT or RIGHT. +;; +;; **** Local variables in side window buffers +;; +;; ide-skel-tabbar-tab-label +;; ide-skel-tabbar-tab-help-string +;; ide-skel-tabbar-menu-function +;; ide-skel-tabbar-enabled +;; ide-skel-keep-condition-function + +(require 'cl) +(require 'complete) +(require 'tree-widget) +(require 'tabbar) +(require 'recentf) + +(defgroup ide-skel nil + "Ide Skeleton" + :group 'tools + :version 21) + +(defcustom ide-skel-tabbar-hidden-buffer-names-regexp-list '("^TAGS" "^diary$") + "Buffer name that matches any of this regexps, will have no tab." + :group 'ide-skel + :tag "Hidden Buffer Names Regexp List" + :type '(repeat regexp) + :initialize 'custom-initialize-default + :set (lambda (symbol value) + (when tabbar-mode + (tabbar-init-tabsets-store)) + (set-default symbol value))) + +(defcustom ide-skel-bottom-view-buffer-names-regexps '("\\*.*\\*") + "Buffers with names matched by one of this regexps will be shown in bottom view." + :group 'ide-skel + :tag "Bottom View Buffer Names Regexps" + :type '(repeat regexp) + :initialize 'custom-initialize-default + :set (lambda (symbol value) + (when tabbar-mode + (tabbar-init-tabsets-store)) + (set-default symbol value)) + ) + +(defcustom ide-skel-bottom-view-buffer-names-disallowed-regexps '("\\*info\\*" "\\*Backtrace\\*") + "Buffers with names matched by one of this regexps will NOT be shown in bottom view." + :group 'ide-skel + :tag "Bottom View Buffer Names Disallowed Regexps" + :type '(repeat regexp) + :initialize 'custom-initialize-default + :set (lambda (symbol value) + (when tabbar-mode + (tabbar-init-tabsets-store)) + (set-default symbol value)) + ) + +(defconst ide-skel-left-view-window-tabset-name "LeftView") +(defconst ide-skel-right-view-window-tabset-name "RightView") +(defconst ide-skel-bottom-view-window-tabset-name "BottomView") +(defconst ide-skel-editor-window-tabset-name "Editor") + +(defun ide-skel-shine-color (color percent) + (when (equal color "unspecified-bg") + (setq color (if (< percent 0) "white" "black"))) + (apply 'format "#%02x%02x%02x" + (mapcar (lambda (value) + (min 65535 (max 0 (* (+ (/ value 650) percent) 650)))) + (color-values color)))) + +(defun ide-skel-color-percentage (color) + (truncate (* (/ (/ (reduce '+ (color-values color)) 3.0) 65535.0) 100.0))) + +(defun ide-skel-shine-face-background (face-sym percent) + (when (>= (ide-skel-color-percentage (face-background 'default)) 50) + (setq percent (- percent))) + (set-face-attribute face-sym nil + :background (ide-skel-shine-color (face-background 'default) percent))) + +(defun ide-skel-shine-face-foreground (face-sym percent) + (when (>= (ide-skel-color-percentage (face-foreground 'default)) 50) + (setq percent (- percent))) + (set-face-attribute face-sym nil + :foreground (ide-skel-shine-color (face-foreground 'default) percent))) + + +(defvar ide-skel-tabbar-tab-label-max-width 25 + "Max width for tab label. Nil means no limit. If label width is too big, it will be shortened with ... inside.") + +(defvar ide-skel-tabbar-tab-label nil + "Tab name. Local for buffer in side view window.") +(make-variable-buffer-local 'ide-skel-tabbar-tab-label) + +(defvar ide-skel-tabbar-tab-help-string nil + "Tooltip text for tab in side view window. Buffer local.") +(make-variable-buffer-local 'ide-skel-tabbar-tab-help-string) + +(defvar ide-skel-tabset-name nil) +(make-variable-buffer-local 'ide-skel-tabset-name) + +(defvar ide-skel-tabbar-menu-function nil) +(make-variable-buffer-local 'ide-skel-tabbar-menu-function) + +(defvar ide-skel-tabbar-enabled nil) +(make-variable-buffer-local 'ide-skel-tabbar-enabled) + +(defvar ide-skel-keep-condition-function nil) +(make-variable-buffer-local 'ide-skel-keep-condition-function) + +(defvar ide-skel-current-left-view-window nil) +(defvar ide-skel-current-right-view-window nil) +(defvar ide-skel-current-editor-window nil) +(defvar ide-skel-current-editor-buffer nil) +(defvar ide-skel-selected-frame nil) + +(defconst ide-skel-left-view-window-xpm "\ +/* XPM */ +static char * left_view_xpm[] = { +\"24 24 145 2\", +\" c None\", +\". c #000000\", +\"+ c #FBFED6\", +\"@ c #F3F6CE\", +\"# c #EBEEC7\", +\"$ c #E3E7BF\", +\"% c #DCE0B9\", +\"& c #D5D9B2\", +\"* c #FFFFFF\", +\"= c #FDFDFD\", +\"- c #F9F9F9\", +\"; c #F4F4F4\", +\"> c #DDDDDD\", +\", c #F2F5CD\", +\"' c #E4E8C0\", +\") c #DDE1BA\", +\"! c #D7DAB4\", +\"~ c #D1D4AE\", +\"{ c #FEFEFE\", +\"] c #FBFBFB\", +\"^ c #F8F8F8\", +\"/ c #F5F5F5\", +\"( c #F2F2F2\", +\"_ c #DBDBDB\", +\": c #E9EDC5\", +\"< c #D8DBB5\", +\"[ c #D2D5AF\", +\"} c #CDD0AA\", +\"| c #FCFCFC\", +\"1 c #F6F6F6\", +\"2 c #F3F3F3\", +\"3 c #F0F0F0\", +\"4 c #DADADA\", +\"5 c #E1E5BD\", +\"6 c #CDD0AB\", +\"7 c #C8CCA6\", +\"8 c #FAFAFA\", +\"9 c #F7F7F7\", +\"0 c #EFEFEF\", +\"a c #D9D9D9\", +\"b c #DADDB6\", +\"c c #C4C7A2\", +\"d c #EDEDED\", +\"e c #D7D7D7\", +\"f c #D3D6B0\", +\"g c #CFD3AD\", +\"h c #CBCFA9\", +\"i c #C8CBA6\", +\"j c #C0C39F\", +\"k c #F1F1F1\", +\"l c #EEEEEE\", +\"m c #ECECEC\", +\"n c #D6D6D6\", +\"o c #C9CDA7\", +\"p c #C6C9A4\", +\"q c #C3C6A1\", +\"r c #BFC39E\", +\"s c #BCBF9B\", +\"t c #EAEAEA\", +\"u c #D4D4D4\", +\"v c #C7CAA5\", +\"w c #C1C5A0\", +\"x c #BEC29D\", +\"y c #BBBF9B\", +\"z c #B9BC98\", +\"A c #EBEBEB\", +\"B c #E8E8E8\", +\"C c #D3D3D3\", +\"D c #C2C5A0\", +\"E c #BDC09C\", +\"F c #BABE99\", +\"G c #B8BB97\", +\"H c #B5B895\", +\"I c #E9E9E9\", +\"J c #E7E7E7\", +\"K c #D1D1D1\", +\"L c #BBBE9A\", +\"M c #B7BA96\", +\"N c #B4B794\", +\"O c #B2B592\", +\"P c #E5E5E5\", +\"Q c #D0D0D0\", +\"R c #B3B693\", +\"S c #B1B491\", +\"T c #AFB28F\", +\"U c #E3E3E3\", +\"V c #CECECE\", +\"W c #B4B793\", +\"X c #B0B390\", +\"Y c #AEB18F\", +\"Z c #ACAF8D\", +\"` c #E6E6E6\", +\" . c #E4E4E4\", +\".. c #E2E2E2\", +\"+. c #CDCDCD\", +\"@. c #ADB08E\", +\"#. c #ABAE8C\", +\"$. c #AAAD8B\", +\"%. c #E0E0E0\", +\"&. c #CBCBCB\", +\"*. c #A9AC8A\", +\"=. c #A7AA89\", +\"-. c #DEDEDE\", +\";. c #CACACA\", +\">. c #ABAE8B\", +\",. c #A8AB89\", +\"'. c #A6A988\", +\"). c #A5A887\", +\"!. c #C8C8C8\", +\"~. c #A7AA88\", +\"{. c #A6A987\", +\"]. c #A4A786\", +\"^. c #A3A685\", +\"/. c #DFDFDF\", +\"(. c #C7C7C7\", +\"_. c #A5A886\", +\":. c #A2A584\", +\"<. c #A1A483\", +\"[. c #C6C6C6\", +\"}. c #A4A785\", +\"|. c #A0A382\", +\"1. c #9FA282\", +\"2. c #D8D8D8\", +\"3. c #C4C4C4\", +\"4. c #A3A684\", +\"5. c #A2A484\", +\"6. c #A0A383\", +\"7. c #9EA181\", +\"8. c #9DA080\", +\"9. c #C3C3C3\", +\"0. c #8D8F72\", +\"a. c #8C8E72\", +\"b. c #8B8D71\", +\"c. c #8A8C70\", +\"d. c #898B6F\", +\"e. c #888A6F\", +\"f. c #C5C5C5\", +\"g. c #C2C2C2\", +\"h. c #C1C1C1\", +\"i. c #C0C0C0\", +\"j. c #BEBEBE\", +\"k. c #BDBDBD\", +\"l. c #BBBBBB\", +\"m. c #BABABA\", +\"n. c #ABABAB\", +\" \", +\" . . . . . . . . . . . . . . . . . . . . . . \", +\". + @ # $ % & . * * * * * * * * * * = - ; ; > . \", +\". , # ' ) ! ~ . * * * * * * * * * { ] ^ / ( _ . \", +\". : $ ) < [ } . * * * * * * * * * | - 1 2 3 4 . \", +\". 5 % ! [ 6 7 . * * * * * * * * = 8 9 ; 3 0 a . \", +\". b & ~ } 7 c . * * * * * * * { ] ^ / ( 0 d e . \", +\". f g h i c j . * * * * * * * | - 1 2 k l m n . \", +\". } o p q r s . * * * * * * = 8 9 ; 3 0 m t u . \", +\". v c w x y z . * * * * * = 8 9 / ( 0 d A B C . \", +\". D r E F G H . * * * * { ] ^ / 2 3 l A I J K . \", +\". E L z M N O . * * * { ] ^ 1 2 3 l m I J P Q . \", +\". z M H R S T . * * { ] ^ 1 2 k l m t B P U V . \", +\". H W O X Y Z . * = ] ^ 1 2 k 0 m t B ` ...+.. \", +\". O X T @.#.$.. = 8 ^ 1 2 k 0 m t B ` ...%.&.. \", +\". T @.Z $.*.=.. 8 9 / 2 k 0 m t B ` ...%.-.;.. \", +\". Z >.*.,.'.).. 9 / 2 3 l m t B ` ...%.-.> !.. \", +\". *.,.~.{.].^.. ; ( 3 l m t B ` ...%./.> _ (.. \", +\". ~.{._.^.:.<.. k 0 l m t B ` ...%./.> _ a [.. \", +\". _.}.:.<.|.1.. 0 d A I B ` ...%./.> _ a 2.3.. \", +\". 4.5.6.1.7.8.. m A I J P ...%.-.> _ a 2.n 9.. \", +\". 0.a.b.c.d.e.. +.&.;.!.(.f.3.g.h.i.j.k.l.m.n.. \", +\" . . . . . . . . . . . . . . . . . . . . . . \", +\" \"}; +" + "XPM format image used as left view window icon") + +(defconst ide-skel-left-view-window-image + (create-image ide-skel-left-view-window-xpm 'xpm t)) + +(defconst ide-skel-right-view-window-xpm "\ +/* XPM */ +static char * right_view_xpm[] = { +\"24 24 125 2\", +\" c None\", +\". c #000000\", +\"+ c #FFFFFF\", +\"@ c #A8AB89\", +\"# c #A6A987\", +\"$ c #A4A785\", +\"% c #A2A484\", +\"& c #A0A282\", +\"* c #919376\", +\"= c #A7AA88\", +\"- c #A5A886\", +\"; c #A2A584\", +\"> c #A0A383\", +\", c #9FA181\", +\"' c #909275\", +\") c #A3A685\", +\"! c #A1A483\", +\"~ c #9FA282\", +\"{ c #9DA080\", +\"] c #8F9174\", +\"^ c #A4A786\", +\"/ c #A0A382\", +\"( c #9EA181\", +\"_ c #9C9F7F\", +\": c #8E9073\", +\"< c #FEFEFE\", +\"[ c #9B9E7F\", +\"} c #8D8F73\", +\"| c #FCFCFC\", +\"1 c #A1A484\", +\"2 c #9EA180\", +\"3 c #9A9D7E\", +\"4 c #8C8E72\", +\"5 c #FDFDFD\", +\"6 c #FAFAFA\", +\"7 c #9B9E7E\", +\"8 c #999C7D\", +\"9 c #8B8D71\", +\"0 c #F7F7F7\", +\"a c #9FA281\", +\"b c #9A9C7D\", +\"c c #989B7C\", +\"d c #8A8C70\", +\"e c #FBFBFB\", +\"f c #F8F8F8\", +\"g c #F5F5F5\", +\"h c #9C9E7F\", +\"i c #9A9D7D\", +\"j c #979A7B\", +\"k c #898B70\", +\"l c #F6F6F6\", +\"m c #F3F3F3\", +\"n c #999C7C\", +\"o c #96997A\", +\"p c #888A6F\", +\"q c #F1F1F1\", +\"r c #9B9D7E\", +\"s c #989A7B\", +\"t c #959779\", +\"u c #87896E\", +\"v c #EFEFEF\", +\"w c #959879\", +\"x c #949678\", +\"y c #86886D\", +\"z c #ECECEC\", +\"A c #97997B\", +\"B c #949778\", +\"C c #939577\", +\"D c #85876C\", +\"E c #EAEAEA\", +\"F c #95987A\", +\"G c #919476\", +\"H c #84876C\", +\"I c #F9F9F9\", +\"J c #F0F0F0\", +\"K c #EEEEEE\", +\"L c #E8E8E8\", +\"M c #949779\", +\"N c #939578\", +\"O c #929476\", +\"P c #909375\", +\"Q c #83866B\", +\"R c #F4F4F4\", +\"S c #F2F2F2\", +\"T c #E6E6E6\", +\"U c #939678\", +\"V c #929477\", +\"W c #909376\", +\"X c #8F9275\", +\"Y c #82856A\", +\"Z c #E4E4E4\", +\"` c #8E9174\", +\" . c #818469\", +\".. c #EDEDED\", +\"+. c #EBEBEB\", +\"@. c #E9E9E9\", +\"#. c #E2E2E2\", +\"$. c #8D9073\", +\"%. c #808368\", +\"&. c #E7E7E7\", +\"*. c #E5E5E5\", +\"=. c #E0E0E0\", +\"-. c #8C8F72\", +\";. c #7F8268\", +\">. c #D6D6D6\", +\",. c #D5D5D5\", +\"'. c #D4D4D4\", +\"). c #D2D2D2\", +\"!. c #D1D1D1\", +\"~. c #D0D0D0\", +\"{. c #CECECE\", +\"]. c #CDCDCD\", +\"^. c #CBCBCB\", +\"/. c #CACACA\", +\"(. c #C8C8C8\", +\"_. c #C7C7C7\", +\":. c #C5C5C5\", +\"<. c #C4C4C4\", +\"[. c #C2C2C2\", +\"}. c #7D8066\", +\"|. c #7C7F65\", +\"1. c #7B7E64\", +\"2. c #7B7D64\", +\"3. c #7A7C63\", +\"4. c #70725B\", +\" \", +\" . . . . . . . . . . . . . . . . . . . . . . \", +\". + + + + + + + + + + + + + + + . @ # $ % & * . \", +\". + + + + + + + + + + + + + + + . = - ; > , ' . \", +\". + + + + + + + + + + + + + + + . # ) ! ~ { ] . \", +\". + + + + + + + + + + + + + + + . ^ ; / ( _ : . \", +\". + + + + + + + + + + + + + + < . ) ! ~ { [ } . \", +\". + + + + + + + + + + + + + + | . 1 & 2 _ 3 4 . \", +\". + + + + + + + + + + + + + 5 6 . > ( _ 7 8 9 . \", +\". + + + + + + + + + + + + 5 6 0 . a { 7 b c d . \", +\". + + + + + + + + + + + < e f g . { h i c j k . \", +\". + + + + + + + + + + < e f l m . _ 3 n j o p . \", +\". + + + + + + + + + < e f l m q . r 8 s o t u . \", +\". + + + + + + + + 5 e f l m q v . 8 c o w x y . \", +\". + + + + + + + 5 6 f l m q v z . c A w B C D . \", +\". + + + + + < | 6 0 g m q v z E . A F B C G H . \", +\". + + + + 5 e I 0 g m J K z E L . F M N O P Q . \", +\". + + < | 6 f l R S J K z E L T . M U V W X Y . \", +\". < 5 e I 0 g m q v K z E L T Z . U V * X ` .. \", +\". e I f l R S q v ..+.@.L T Z #.. V * X ` $.%.. \", +\". f l g m q J K z +.@.&.*.Z #.=.. W X ` $.-.;.. \", +\". >.,.'.).!.~.{.].^./.(._.:.<.[.. }.|.1.2.3.4.. \", +\" . . . . . . . . . . . . . . . . . . . . . . \", +\" \"}; +" + "XPM format image used as right view window icon") + +(defconst ide-skel-right-view-window-image + (create-image ide-skel-right-view-window-xpm 'xpm t)) + +(defconst ide-skel-bottom-view-window-xpm "\ +/* XPM */ +static char * bottom_view_xpm[] = { +\"24 24 130 2\", +\" c None\", +\". c #000000\", +\"+ c #FFFFFF\", +\"@ c #FDFDFD\", +\"# c #F9F9F9\", +\"$ c #F6F6F6\", +\"% c #F4F4F4\", +\"& c #DDDDDD\", +\"* c #FEFEFE\", +\"= c #FBFBFB\", +\"- c #F8F8F8\", +\"; c #F5F5F5\", +\"> c #F2F2F2\", +\", c #DBDBDB\", +\"' c #FCFCFC\", +\") c #F3F3F3\", +\"! c #F0F0F0\", +\"~ c #DADADA\", +\"{ c #FAFAFA\", +\"] c #F7F7F7\", +\"^ c #F1F1F1\", +\"/ c #EFEFEF\", +\"( c #D9D9D9\", +\"_ c #EDEDED\", +\": c #D7D7D7\", +\"< c #EEEEEE\", +\"[ c #ECECEC\", +\"} c #D6D6D6\", +\"| c #EAEAEA\", +\"1 c #D4D4D4\", +\"2 c #EBEBEB\", +\"3 c #E8E8E8\", +\"4 c #D3D3D3\", +\"5 c #E9E9E9\", +\"6 c #E7E7E7\", +\"7 c #D1D1D1\", +\"8 c #E5E5E5\", +\"9 c #D0D0D0\", +\"0 c #E3E3E3\", +\"a c #CECECE\", +\"b c #E6E6E6\", +\"c c #E4E4E4\", +\"d c #E2E2E2\", +\"e c #CDCDCD\", +\"f c #E0E0E0\", +\"g c #CBCBCB\", +\"h c #CCCFAB\", +\"i c #CACDAA\", +\"j c #C8CBA8\", +\"k c #C7CAA7\", +\"l c #C5C8A5\", +\"m c #C3C6A4\", +\"n c #C2C5A3\", +\"o c #C0C3A1\", +\"p c #BEC1A0\", +\"q c #BDBF9E\", +\"r c #BBBE9D\", +\"s c #B9BC9B\", +\"t c #B8BA9A\", +\"u c #B6B999\", +\"v c #B4B797\", +\"w c #B3B596\", +\"x c #B1B495\", +\"y c #B0B293\", +\"z c #AEB192\", +\"A c #ADAF91\", +\"B c #ABAE8F\", +\"C c #9C9E82\", +\"D c #C9CCA8\", +\"E c #C6C9A6\", +\"F c #C4C7A5\", +\"G c #C1C4A2\", +\"H c #BFC2A1\", +\"I c #BEC19F\", +\"J c #BCBF9E\", +\"K c #BABD9C\", +\"L c #B7BA9A\", +\"M c #B6B998\", +\"N c #ABAE90\", +\"O c #AAAD8E\", +\"P c #9A9D81\", +\"Q c #C2C4A2\", +\"R c #BFC1A0\", +\"S c #BDC09F\", +\"T c #BCBE9D\", +\"U c #B9BB9B\", +\"V c #B7BA99\", +\"W c #B6B898\", +\"X c #B1B494\", +\"Y c #A9AB8D\", +\"Z c #999C80\", +\"` c #C1C3A2\", +\" . c #BFC2A0\", +\".. c #B9BC9C\", +\"+. c #B8BB9A\", +\"@. c #B7B999\", +\"#. c #B5B898\", +\"$. c #B4B697\", +\"%. c #B2B596\", +\"&. c #AAAD8F\", +\"*. c #A7AA8C\", +\"=. c #989B80\", +\"-. c #BDC09E\", +\";. c #B3B696\", +\">. c #B2B595\", +\",. c #B1B394\", +\"'. c #AFB293\", +\"). c #A6A98B\", +\"!. c #97997F\", +\"~. c #A7A98C\", +\"{. c #A6A88B\", +\"]. c #A4A78A\", +\"^. c #A3A689\", +\"/. c #A2A588\", +\"(. c #A1A487\", +\"_. c #A0A286\", +\":. c #9FA185\", +\"<. c #9EA084\", +\"[. c #9D9F83\", +\"}. c #9B9E82\", +\"|. c #999B80\", +\"1. c #989A7F\", +\"2. c #97997E\", +\"3. c #96987D\", +\"4. c #95977D\", +\"5. c #94967C\", +\"6. c #92957B\", +\"7. c #91947A\", +\"8. c #909279\", +\"9. c #85876F\", +\" \", +\" . . . . . . . . . . . . . . . . . . . . . . \", +\". + + + + + + + + + + + + + + + + + @ # $ % & . \", +\". + + + + + + + + + + + + + + + + * = - ; > , . \", +\". + + + + + + + + + + + + + + + + ' # $ ) ! ~ . \", +\". + + + + + + + + + + + + + + + @ { ] % ^ / ( . \", +\". + + + + + + + + + + + + + + * = - ; > ! _ : . \", +\". + + + + + + + + + + + + + + ' # $ ) / < [ } . \", +\". + + + + + + + + + + + + + @ { ] % ^ < [ | 1 . \", +\". + + + + + + + + + + + + @ { ] ; > / _ 2 3 4 . \", +\". + + + + + + + + + + + * = - ; > ! < 2 5 6 7 . \", +\". + + + + + + + + + + * = - $ ) ! < [ 5 6 8 9 . \", +\". + + + + + + + + + * = - $ ) ^ < [ | 3 8 0 a . \", +\". + + + + + + + + @ = - $ ) ^ / [ | 3 b c d e . \", +\". + + + + + + + @ { - $ ) ^ / [ | 3 b c d f g . \", +\". . . . . . . . . . . . . . . . . . . . . . . . \", +\". h i j k l m n o p q r s t u v w x y z A B C . \", +\". D k E F n G H I J K s L M v w x y z A N O P . \", +\". E F m Q o R S T K U V W v w X y z A N O Y Z . \", +\". m n ` .I J r ..+.@.#.$.%.X y z A N &.Y *.=.. \", +\". G H p -.T K s t u #.;.>.,.'.z A N O Y *.).!.. \", +\". ~.{.].^./.(._.:.<.[.}.P |.1.2.3.4.5.6.7.8.9.. \", +\" . . . . . . . . . . . . . . . . . . . . . . \", +\" \"}; +" + "XPM format image used as bottom view window icon") + +(defconst ide-skel-bottom-view-window-image + (create-image ide-skel-bottom-view-window-xpm 'xpm t)) + +(defvar ide-skel-win--win2-switch t) + +(defvar ide-skel-win--minibuffer-selected-p nil) + +;; (copy-win-node w) +;; (win-node-corner-pos w) +;; (make-win-node :corner-pos 0 :buffer b :horiz-scroll 0 :point 0 :mark nil :divisions nil) +;; (win-node-p w) +(defstruct win-node + "Window configuration tree node." + (corner-pos nil) ; pair - original position of left top window corner + (buf-corner-pos 1) ; position within the buffer at the upper left of the window + buffer ; the buffer window displays + (horiz-scroll 0) ; amount of horizontal scrolling, in columns + (point 1) ; point + (mark nil) ; the mark + (edges nil) ; (window-edges) + (cursor-priority nil) + (fixed-size nil) + (divisions nil)) ; children (list of division) + +(defstruct division + "Podzial okienka" + win-node ; winnode for window after division + horizontal-p ; division horizontal or vertical + percent) ; 0.0-1.0: width/height of parent after division + +(defvar sel-window nil) +(defvar sel-priority nil) + +(defvar ide-skel-ommited-windows nil) + +(defvar ide-skel--fixed-size-windows nil) + +;; args: 'left/right 'show/editor-buffer-changed/hide/tab-change &rest buffer... +(defvar ide-skel-side-view-window-functions nil) + +(defvar ide-skel-editor-buffer-changed-hook nil) + +(defvar ide-skel-last-buffer-change-event nil) +(defvar ide-skel-last-selected-window-or-buffer nil) + +(defcustom ide-skel-bottom-view-window-size 0.35 + "Default bottom view window height in characters (int >= 5) or percent of Emacs frame height (0.0 - 1.0)" + :group 'ide-skel + :tag "Default Bottom View Window Height" + :type (list 'restricted-sexp + :match-alternatives (list (lambda (value) + (or (and (floatp value) + (> value 0.0) + (< value 1.0)) + (and (integerp value) + (>= value 5))))))) + +(defcustom ide-skel-bottom-view-on-left-view t + "Non-nil if bottom view lies partially on left view." + :group 'ide-skel + :tag "Bottom View on Left View" + :type '(boolean) + :initialize 'custom-initialize-default + :set (lambda (symbol value) + (let ((is-bottom-view-window (ide-skel-get-bottom-view-window))) + (when is-bottom-view-window + (ide-skel-hide-bottom-view-window)) + (unwind-protect + (set-default symbol value) + (when is-bottom-view-window + (ide-skel-show-bottom-view-window)))))) + +(defcustom ide-skel-bottom-view-on-right-view t + "Non-nil if bottom view lies partially on right view." + :group 'ide-skel + :tag "Bottom View on Right View" + :type '(boolean) + :initialize 'custom-initialize-default + :set (lambda (symbol value) + (let ((is-bottom-view-window (ide-skel-get-bottom-view-window))) + (when is-bottom-view-window + (ide-skel-hide-bottom-view-window)) + (unwind-protect + (set-default symbol value) + (when is-bottom-view-window + (ide-skel-show-bottom-view-window)))))) + +(defconst ide-skel-unexpected-bottom-view-window-buffer-names '("*Completions*" "*Compile-Log*")) + +(defvar ide-skel--last-bottom-view-buffer-name nil) + +(defvar ide-skel-was-scratch nil) + +(defvar ide-skel-bottom-view-window-oper-in-progress nil) + +(defvar ide-skel--current-side-windows (cons nil nil)) + +(defcustom ide-skel-left-view-window-width 25 + "Default width of left view window." + :group 'ide-skel + :tag "Default Left View Window Width" + :type '(integer) + :initialize 'custom-initialize-default + :set (lambda (symbol value) + (let ((is-left-view-window (ide-skel-get-left-view-window))) + (when is-left-view-window + (ide-skel-hide-left-view-window)) + (unwind-protect + (set-default symbol value) + (when is-left-view-window + (ide-skel-show-left-view-window)))))) + +(defcustom ide-skel-right-view-window-width 30 + "Default width of right view window." + :group 'ide-skel + :tag "Default Right View Window Width" + :type '(integer) + :initialize 'custom-initialize-default + :set (lambda (symbol value) + (let ((is-right-view-window (ide-skel-get-right-view-window))) + (when is-right-view-window + (ide-skel-hide-right-view-window)) + (unwind-protect + (set-default symbol value) + (when is-right-view-window + (ide-skel-show-right-view-window)))))) + +(defcustom ide-skel-side-view-display-cursor nil + "Non-nil if cursor should be displayed in side view windows" + :group 'ide-skel + :tag "Side View Display Cursor" + :type 'boolean) + +(defvar ide-skel-highlight-face 'ide-skel-highlight-face) +(defface ide-skel-highlight-face + (list + (list '((background light)) + (append (list :inherit 'variable-pitch :background (ide-skel-shine-color (face-background 'default) -70) :foreground (face-background 'default)) + (when (>= emacs-major-version 22) '(:box (:style released-button))))) + (list '((background dark)) + (append (list :inherit 'variable-pitch :background (ide-skel-shine-color (face-background 'default) +70) :foreground (face-background 'default)) + (when (>= emacs-major-version 22) '(:box (:style released-button))))) + '(t (:inherit default))) + "Face for selection in side views." + :group 'ide-skel) + +;;; buffer -> alist +;;; :imenu-buffer +;;; :default-left-tab-label, :default-right-tab-label +(defvar ide-skel-context-properties (make-hash-table :test 'eq)) + +(defvar ide-skel-last-left-view-window-tab-label nil) +(defvar ide-skel-last-right-view-window-tab-label nil) + +(defvar ide-skel-buffer-list-buffer nil) +(defvar ide-skel-buffer-list nil) + +(defvar ide-skel-buffer-list-tick nil) + +(defconst ide-skel-tree-widget-open-xpm "\ +/* XPM */ +static char *open[] = { +/* columns rows colors chars-per-pixel */ +\"11 15 49 1\", +\" c #4D084D080B7B\", +\". c #5A705A700DBB\", +\"X c #7B647B6404B5\", +\"o c #7818781810F1\", +\"O c #7E1E7E1E16D4\", +\"+ c #5EB75D2D6FCF\", +\"@ c #5FD85D2D6FCF\", +\"# c #60415D2D6FCF\", +\"$ c #88BD88BD068F\", +\"% c #8A5D8A5D0969\", +\"& c #82F782F71033\", +\"* c #841B841B1157\", +\"= c #87BC87BC1125\", +\"- c #878787871696\", +\"; c #87D587BE172E\", +\": c #87C187C11812\", +\"> c #895A895A1B9C\", +\", c #8A0A8A0A1C10\", +\"< c #8E5B8DF21DE7\", +\"1 c #95DF95DF1A5F\", +\"2 c #95CC95CC1B5B\", +\"3 c #98D498D41EE5\", +\"4 c #9BBB9BBB2414\", +\"5 c #9BBB9BBB2622\", +\"6 c #9CDF9CDF2696\", +\"7 c #984C984C281C\", +\"8 c #9EA19EA129C1\", +\"9 c #A060A0602B4B\", +\"0 c #A3BAA3BA3148\", +\"q c #A78AA78A36FD\", +\"w c #A7BBA7BB38D9\", +\"e c #A7B7A7B73B03\", +\"r c #AB1AAB1A3B03\", +\"t c #ABD7ABD73C6C\", +\"y c #AFC5AFC54435\", +\"u c #B5D2B5D24A67\", +\"i c #B659B6594AEE\", +\"p c #B959B9595378\", +\"a c #BBCEBBCE5267\", +\"s c #BE64BE645A53\", +\"d c #C2D2C2D26078\", +\"f c #C43BC43B60D8\", +\"g c #C42EC42E60EE\", +\"h c #C44FC44F60EC\", +\"j c #C73BC73B66E7\", +\"k c #C65DC65D697B\", +\"l c #CECECECE7676\", +\"z c #D02CD02C7B7B\", +\"x c None\", +/* pixels */ +\"xxxxxxxxxxx\", +\"xxxxxxxxxxx\", +\"xxxxxxxxxxx\", +\"xxxxxxxxxxx\", +\"x,> xxxxxxx\", +\"6zlpw07xxxx\", +\"5k32211=oxx\", +\"49ryuasfexx\", +\"$8yuasgdOxx\", +\"%qiashjtxxx\", +\"X&*<;-:.xxx\", +\"xxx@xxxxxxx\", +\"xxx#xxxxxxx\", +\"xxx+xxxxxxx\", +\"xxx+xxxxxxx\" +}; +") + +(defconst ide-skel-tree-widget-open-image + (create-image ide-skel-tree-widget-open-xpm 'xpm t)) + +(defconst ide-skel-tree-widget-no-handle-xpm "\ +/* XPM */ +static char *no_handle[] = { +/* columns rows colors chars-per-pixel */ +\"7 15 1 1\", +\" c None\", +/* pixels */ +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \" +}; +") + +(defconst ide-skel-tree-widget-no-handle-image + (create-image ide-skel-tree-widget-no-handle-xpm 'xpm t)) + +(defconst ide-skel-tree-widget-no-guide-xpm "\ +/* XPM */ +static char *no_guide[] = { +/* columns rows colors chars-per-pixel */ +\"4 15 1 1\", +\" c None\", +/* pixels */ +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \", +\" \" +}; +") + +(defconst ide-skel-tree-widget-no-guide-image + (create-image ide-skel-tree-widget-no-guide-xpm 'xpm t)) + +(defconst ide-skel-tree-widget-leaf-xpm "\ +/* XPM */ +static char *leaf[] = { +/* columns rows colors chars-per-pixel */ +\"11 15 42 1\", +\" c #224222422242\", +\". c #254525452545\", +\"X c #272727272727\", +\"o c #31DA31DA31DA\", +\"O c #4CAC4CAC4CAC\", +\"+ c #4F064F064F06\", +\"@ c #506050605060\", +\"# c #511651165116\", +\"$ c #57D657D657D6\", +\"% c #59A559A559A5\", +\"& c #5AAC5AAC5AAC\", +\"* c #5D5A5D5A5D5A\", +\"= c #5F025F025F02\", +\"- c #60C660C660C6\", +\"; c #617D617D617D\", +\": c #63D363D363D3\", +\"> c #8B908B908B90\", +\", c #8E3C8E3C8E3C\", +\"< c #8F588F588F58\", +\"1 c #93FC93FC93FC\", +\"2 c #949194919491\", +\"3 c #96AD96AD96AD\", +\"4 c #991899189918\", +\"5 c #99EA99EA99EA\", +\"6 c #9B619B619B61\", +\"7 c #9CD69CD69CD6\", +\"8 c #9E769E769E76\", +\"9 c #9FA59FA59FA5\", +\"0 c #A0C3A0C3A0C3\", +\"q c #A293A293A293\", +\"w c #A32EA32EA32E\", +\"e c #A480A480A480\", +\"r c #A5A5A5A5A5A5\", +\"t c #A755A755A755\", +\"y c #AA39AA39AA39\", +\"u c #AC77AC77AC77\", +\"i c #B1B7B1B7B1B7\", +\"p c #B283B283B283\", +\"a c #B7B7B7B7B7B7\", +\"s c #BD02BD02BD02\", +\"d c gray74\", +\"f c None\", +/* pixels */ +\"fffffffffff\", +\"fffffffffff\", +\"fffffffffff\", +\"XXXXfffffff\", +\"%,25#offfff\", +\"*6qr$&.ffff\", +\"=1<3>wOffff\", +\";6648a@ffff\", +\";wweys#ffff\", +\":970ed#ffff\", +\"-tuipp+ffff\", +\"XXXXXX ffff\", +\"fffffffffff\", +\"fffffffffff\", +\"fffffffffff\" +}; +") + +(defconst ide-skel-tree-widget-leaf-image + (create-image ide-skel-tree-widget-leaf-xpm 'xpm t)) + +(defconst ide-skel-tree-widget-handle-xpm "\ +/* XPM */ +static char *handle[] = { +/* columns rows colors chars-per-pixel */ +\"7 15 2 1\", +\" c #56D752D36363\", +\". c None\", +/* pixels */ +\".......\", +\".......\", +\".......\", +\".......\", +\".......\", +\".......\", +\".......\", +\" \", +\".......\", +\".......\", +\".......\", +\".......\", +\".......\", +\".......\", +\".......\" +}; +") + +(defconst ide-skel-tree-widget-handle-image + (create-image ide-skel-tree-widget-handle-xpm 'xpm t)) + +(defconst ide-skel-tree-widget-guide-xpm "\ +/* XPM */ +static char *guide[] = { +/* columns rows colors chars-per-pixel */ +\"4 15 2 1\", +\" c #73C96E6E8484\", +\". c None\", +/* pixels */ +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \" +}; +") + +(defconst ide-skel-tree-widget-guide-image + (create-image ide-skel-tree-widget-guide-xpm 'xpm t)) + +(defconst ide-skel-tree-widget-end-guide-xpm "\ +/* XPM */ +static char *end_guide[] = { +/* columns rows colors chars-per-pixel */ +\"4 15 2 1\", +\" c #73C96E6E8484\", +\". c None\", +/* pixels */ +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"... \", +\"....\", +\"....\", +\"....\", +\"....\", +\"....\", +\"....\", +\"....\" +}; +") + +(defconst ide-skel-tree-widget-end-guide-image + (create-image ide-skel-tree-widget-end-guide-xpm 'xpm t)) + +(defconst ide-skel-tree-widget-empty-xpm "\ +/* XPM */ +static char *empty[] = { +/* columns rows colors chars-per-pixel */ +\"11 15 39 1\", +\" c #2BCF2BCF2BCF\", +\". c #31F831F831F8\", +\"X c #3F283F283F28\", +\"o c #41B141B141B1\", +\"O c #467946794679\", +\"+ c #476747674767\", +\"@ c #484648464846\", +\"# c #498749874987\", +\"$ c #4B684B684B68\", +\"% c #524F524F524F\", +\"& c #52D352D352D3\", +\"* c #554155415541\", +\"= c #561C561C561C\", +\"- c #598659865986\", +\"; c #5D775D775D77\", +\": c #5E7E5E7E5E7E\", +\"> c #60CE60CE60CE\", +\", c #615161516151\", +\"< c #61F361F361F3\", +\"1 c #642464246424\", +\"2 c #654865486548\", +\"3 c #678767876787\", +\"4 c #68D868D868D8\", +\"5 c #699569956995\", +\"6 c #6D556D556D55\", +\"7 c #6FB56FB56FB5\", +\"8 c #72CF72CF72CF\", +\"9 c #731073107310\", +\"0 c #757775777577\", +\"q c #7B747B747B74\", +\"w c #809080908090\", +\"e c #81F281F281F2\", +\"r c #820D820D820D\", +\"t c #84F984F984F9\", +\"y c #858285828582\", +\"u c #95E295E295E2\", +\"i c #9FFF9FFF9FFF\", +\"p c #A5A5A5A5A5A5\", +\"a c None\", +/* pixels */ +\"aaaaaaaaaaa\", +\"aaaaaaaaaaa\", +\"aaaaaaaaaaa\", +\"aaaaaaaaaaa\", +\"a&% aaaaaaa\", +\",piy76u-===*#oaa\", +\":14690qe3aa\", +\"+;680qewOaa\", +\"@290qrt5aaa\", +\"XO+@#$$.aaa\", +\"aaaaaaaaaaa\", +\"aaaaaaaaaaa\", +\"aaaaaaaaaaa\", +\"aaaaaaaaaaa\" +}; +") + +(defconst ide-skel-tree-widget-empty-image + (create-image ide-skel-tree-widget-empty-xpm 'xpm t)) + +(defconst ide-skel-tree-widget-close-xpm "\ +/* XPM */ +static char *close[] = { +/* columns rows colors chars-per-pixel */ +\"11 15 45 1\", +\" c #4EA14EA10DFA\", +\". c #5AA05AA00C52\", +\"X c #75297529068F\", +\"o c #7B647B6404B5\", +\"O c #8B888B880B91\", +\"+ c #8EDE8EDE0F5F\", +\"@ c #82F782F71033\", +\"# c #83A683A61157\", +\"$ c #84AD84AD13BC\", +\"% c #857985791489\", +\"& c #868086801590\", +\"* c #8A8A8A8A1697\", +\"= c #878787871812\", +\"- c #885388531936\", +\"; c #8BAB8BAB17B8\", +\": c #8CCC8CCC1A7D\", +\"> c #8DB68DB61BC4\", +\", c #90EC90EC11D0\", +\"< c #9161916114B5\", +\"1 c #92A292A2163F\", +\"2 c #8E8B8E8B2150\", +\"3 c #8F0F8F0F2274\", +\"4 c #9AF79AF72386\", +\"5 c #9D289D282655\", +\"6 c #9ED19ED1286E\", +\"7 c #9F599F592912\", +\"8 c #A31DA31D2D82\", +\"9 c #A3DDA3DD2DA2\", +\"0 c #A144A1442ED2\", +\"q c #A828A82833B4\", +\"w c #AB38AB383AEB\", +\"e c #AD21AD213DC2\", +\"r c #AD6DAD6D3E56\", +\"t c #AFFCAFFC4481\", +\"y c #B0AAB0AA429F\", +\"u c #B1B1B1B144E8\", +\"i c #B51DB51D4A5F\", +\"p c #B535B5354A8A\", +\"a c #B56FB56F4AEE\", +\"s c #B7B0B7B0525B\", +\"d c #BD14BD1459B1\", +\"f c #BFACBFAC5C55\", +\"g c #C5D9C5D965F7\", +\"h c #C85FC85F6D04\", +\"j c None\", +/* pixels */ +\"jjjjjjjjjjj\", +\"jjjjjjjjjjj\", +\"jjjjjjjjjjj\", +\"jjjjjjjjjjj\", +\"j32 jjjjjjj\", +\"1uy84570.jj\", +\"O69wtpsd*jj\", +\"+qrtpsdf;jj\", +\",etisdfg:jj\", +\"jj\", +\"o@#$%&=-Xjj\", +\"jjjjjjjjjjj\", +\"jjjjjjjjjjj\", +\"jjjjjjjjjjj\", +\"jjjjjjjjjjj\" +}; +") + +(defconst ide-skel-tree-widget-close-image + (create-image ide-skel-tree-widget-close-xpm 'xpm t)) + +(define-widget 'ide-skel-imenu-internal-node-widget 'tree-widget + "Internal node widget.") + +(define-widget 'ide-skel-imenu-leaf-widget 'push-button + "Leaf widget." + :format "%[%t%]\n" + :button-face 'variable-pitch + ) + +(defvar ide-skel-imenu-sorted nil) +(make-variable-buffer-local 'ide-skel-imenu-sorted) + +(defvar ide-skel-imenu-editor-buffer nil) +(make-variable-buffer-local 'ide-skel-imenu-editor-buffer) + +(defvar ide-skel-imenu-open-paths nil) +(make-variable-buffer-local 'ide-skel-imenu-open-paths) + +(defface imenu-side-view-face '((t :inherit variable-pitch :height 0.8)) + "Default face used in right view for imenu" + :group 'ide-skel) + +(define-widget 'ide-skel-info-tree-dir-widget 'tree-widget + "Directory Tree widget." + :expander 'ide-skel-info-tree-expand-dir + :notify 'ide-skel-info-open + :indent 0) + +(define-widget 'ide-skel-info-tree-file-widget 'push-button + "File widget." + :format "%[%t%]%d\n" + :button-face 'variable-pitch + :notify 'ide-skel-info-file-open) + +(defvar ide-skel-info-open-paths nil) +(make-variable-buffer-local 'ide-skel-info-open-paths) + +(defvar ide-skel-info-root-node nil) +(make-variable-buffer-local 'ide-skel-info-root-node) + +(defvar ide-skel-info-buffer nil) + +(define-widget 'ide-skel-dir-tree-dir-widget 'tree-widget + "Directory Tree widget." + :expander 'ide-skel-dir-tree-expand-dir + :notify 'ide-skel-dir-open + :indent 0) + +(define-widget 'ide-skel-dir-tree-file-widget 'push-button + "File widget." + :format "%[%t%]%d\n" + :button-face 'variable-pitch + :notify 'ide-skel-file-open) + +(defvar ide-skel-dir-open-paths nil) +(make-variable-buffer-local 'ide-skel-dir-open-paths) + +(defvar ide-skel-dir-root-dir "/") +(make-variable-buffer-local 'ide-skel-dir-root-dir) + +(defvar ide-skel-dir-buffer nil) + +(defconst ide-skel-cvs-dir-regexp "\\(\\.svn\\|CVS\\)$") + +(defstruct ide-skel-project + root-path + include-file-path ; for PC-include-file-path variable +) + +(defvar ide-skel-projects nil) + +(defvar ide-skel-proj-find-results-buffer-name "*Proj find*") + +(defvar ide-skel-project-menu + '("Project" + :filter ide-skel-project-menu) + "Menu for CVS/SVN projects") + +(defvar ide-skel-proj-find-project-files-history nil) +(defvar ide-skel-proj-grep-project-files-history nil) + +(defvar ide-skel-proj-ignored-extensions '("semantic.cache")) + +(defvar ide-skel-all-text-files-flag nil) + +(defvar ide-skel-proj-grep-header nil) + +(defvar ide-skel-proj-old-compilation-exit-message-function nil) +(make-variable-buffer-local 'ide-skel-proj-old-compilation-exit-message-function) + +(defvar ide-skel-proj-grep-mode-map nil) + +(defvar ide-skel-proj-grep-replace-history nil) + +;;; + +(copy-face 'mode-line 'mode-line-inactive) + +(define-key tree-widget-button-keymap [drag-mouse-1] 'ignore) + +(defun ide-skel-tabbar-tab-label (tab) + "Return a label for TAB. +That is, a string used to represent it on the tab bar." + (let* ((object (tabbar-tab-value tab)) + (tabset (tabbar-tab-tabset tab)) + (label (format " %s " + (or (and (bufferp object) + (with-current-buffer object ide-skel-tabbar-tab-label)) ; local in buffer + object)))) + (when (and (not (memq tabset (list (tabbar-get-tabset ide-skel-left-view-window-tabset-name) + (tabbar-get-tabset ide-skel-right-view-window-tabset-name)))) + (numberp ide-skel-tabbar-tab-label-max-width) + (> ide-skel-tabbar-tab-label-max-width 0)) + (setq label (tabbar-shorten label ide-skel-tabbar-tab-label-max-width))) + label)) + +(defun ide-skel-tabbar-help-on-tab (tab) + "Return the help string shown when mouse is onto TAB." + (let ((tabset (tabbar-tab-tabset tab)) + (object (tabbar-tab-value tab))) + (or (when (bufferp object) + (with-current-buffer object + (or ide-skel-tabbar-tab-help-string ; local in buffer + (buffer-file-name)))) + "mouse-1: switch to buffer\nmouse-2: delete other windows\nmouse-3: kill buffer"))) + +(defun ide-skel-tabbar-buffer-groups () + "Return the list of group names the current buffer belongs to." + (if (and (ide-skel-side-view-buffer-p (current-buffer)) + (or (not ide-skel-tabbar-tab-label) + (not ide-skel-tabbar-enabled))) + nil + (let ((result (list (or ide-skel-tabset-name ; local in current buffer + (when (ide-skel-bottom-view-buffer-p (current-buffer)) ide-skel-bottom-view-window-tabset-name) + ide-skel-editor-window-tabset-name)))) + (dolist (window (copy-list (window-list nil 1))) + (when (eq (window-buffer window) (current-buffer)) + (let ((tabset-name (ide-skel-get-tabset-name-for-window window))) + (unless (member tabset-name result) + (push tabset-name result))))) + result))) + +(defun ide-skel-tabbar-buffer-tabs () + "Return the buffers to display on the tab bar, in a tab set." + ;; (message "ide-skel-tabbar-buffer-tabs %S" (current-buffer)) + (tabbar-buffer-update-groups) + (let* ((window (selected-window)) + (tabset (tabbar-get-tabset (ide-skel-get-tabset-name-for-window window)))) + (when (not (tabbar-get-tab (current-buffer) tabset)) + (tabbar-add-tab tabset (current-buffer) t)) + (tabbar-select-tab-value (current-buffer) tabset) + tabset)) + +(defun ide-skel-tabbar-buffer-list () + "Return the list of buffers to show in tabs. +The current buffer is always included." + (ide-skel-tabbar-faces-adapt) + (delq t + (mapcar #'(lambda (b) + (let ((buffer-name (buffer-name b))) + (cond + ((and (ide-skel-side-view-buffer-p b) + (with-current-buffer b + (or (not ide-skel-tabbar-tab-label) + (not ide-skel-tabbar-enabled)))) + t) + ;; Always include the current buffer. + ((eq (current-buffer) b) b) + ;; accept if buffer has tabset name + ((with-current-buffer b ide-skel-tabset-name) b) + ;; remove if matches any regexp from ide-skel-tabbar-hidden-buffer-names-regexp-list + ((not (null (some (lambda (regexp) + (string-match regexp buffer-name)) + ide-skel-tabbar-hidden-buffer-names-regexp-list))) + t) + ;; accept if buffer has filename + ((buffer-file-name b) b) + ;; remove if name starts with space + ((and (char-equal ?\ (aref (buffer-name b) 0)) + (not (ide-skel-side-view-buffer-p b))) + t) + ;; accept otherwise + (b)))) + (buffer-list (selected-frame))))) + +(defun ide-skel-get-tabset-name-for-window (window) + (cond ((eq (ide-skel-get-left-view-window) window) ide-skel-left-view-window-tabset-name) + ((eq (ide-skel-get-right-view-window) window) ide-skel-right-view-window-tabset-name) + ((eq (ide-skel-get-bottom-view-window) window) ide-skel-bottom-view-window-tabset-name) + (t ide-skel-editor-window-tabset-name))) + +(defun ide-skel-tabbar-select-tab (event tab) + "On mouse EVENT, select TAB." + (let* ((mouse-button (event-basic-type event)) + (buffer (tabbar-tab-value tab)) + (tabset-name (and (buffer-live-p buffer) + (with-current-buffer buffer ide-skel-tabset-name))) + (left-tabset (equal tabset-name ide-skel-left-view-window-tabset-name)) + (right-tabset (equal tabset-name ide-skel-right-view-window-tabset-name))) + (cond + ((eq mouse-button 'mouse-1) + (cond (left-tabset (ide-skel-side-window-switch-to-buffer ide-skel-current-left-view-window buffer)) + (right-tabset (ide-skel-side-window-switch-to-buffer ide-skel-current-right-view-window buffer)) + (t (switch-to-buffer buffer)))) + ((and (eq mouse-button 'mouse-2) + (not left-tabset) + (not right-tabset)) + (switch-to-buffer buffer) + (delete-other-windows)) + ((and (eq mouse-button 'mouse-3) + (not left-tabset) + (not right-tabset)) + (kill-buffer buffer))) + ;; Disable group mode. + (set 'tabbar-buffer-group-mode nil))) + +(defun ide-skel-tabbar-buffer-kill-buffer-hook () + "Hook run just before actually killing a buffer. +In Tabbar mode, try to switch to a buffer in the current tab bar, +after the current buffer has been killed. Try first the buffer in tab +after the current one, then the buffer in tab before. On success, put +the sibling buffer in front of the buffer list, so it will be selected +first." + (let ((buffer-to-kill (current-buffer))) + (save-selected-window + (save-current-buffer + ;; cannot kill buffer from any side view window + (when (and (eq header-line-format tabbar-header-line-format) + (not (ide-skel-side-view-buffer-p (current-buffer)))) + (dolist (window (copy-list (window-list nil 1))) + (when (eq buffer-to-kill (window-buffer window)) + (select-window window) + (let ((bl (tabbar-tab-values (funcall tabbar-current-tabset-function))) + found sibling) + (while (and bl (not found)) + (if (equal buffer-to-kill (car bl)) + (setq found t) + (setq sibling (car bl))) + (setq bl (cdr bl))) + (setq sibling (or sibling (car bl))) + (if (and sibling + (not (eq sibling buffer-to-kill)) + (buffer-live-p sibling)) + ;; Move sibling buffer in front of the buffer list. + (switch-to-buffer sibling) + (let ((next-buffer (ide-skel--find-buffer-for-bottom-view-window))) + (when (eq next-buffer buffer-to-kill) + (setq next-buffer (some (lambda (buf) + (if (or (eq buf buffer-to-kill) + (ide-skel-side-view-buffer-p buf) + (ide-skel-hidden-buffer-name-p (buffer-name buf))) + nil + buf)) + (buffer-list (selected-frame))))) + (when next-buffer + (switch-to-buffer next-buffer) + (tabbar-current-tabset t)))))))))))) + +(defun ide-skel-tabbar-inhibit-function () + "Inhibit display of the tab bar in specified windows, that is +in `checkdoc' status windows and in windows with its own header +line." + (let ((result (tabbar-default-inhibit-function)) + (sw (selected-window))) + (when (and result + (ide-skel-side-view-window-p sw)) + (setq result nil)) + (when (not (eq header-line-format tabbar-header-line-format)) + (setq result t)) + result)) + +(defun ide-skel-tabbar-home-function (event) + (let* ((window (posn-window (event-start event))) + (is-view-window (ide-skel-side-view-window-p window)) + (buffer (window-buffer window)) + extra-commands + (normal-window-counter 0)) + (dolist (win (copy-list (window-list nil 1))) + (unless (ide-skel-side-view-window-p win) + (incf normal-window-counter))) + (with-selected-window window + (when (and is-view-window + ide-skel-tabbar-menu-function) + (setq extra-commands (funcall ide-skel-tabbar-menu-function))) + (let ((close-p (when (or is-view-window + (> normal-window-counter 1)) + (list '(close "Close" t)))) + (maximize-p (when (and (not is-view-window) + (> normal-window-counter 1)) + (list '(maximize "Maximize" t))))) + (when (or close-p maximize-p) + (let ((user-selection + (car (x-popup-menu event (append (list 'keymap) close-p maximize-p extra-commands))))) + (cond ((eq user-selection 'close) + (call-interactively 'delete-window)) + ((eq user-selection 'maximize) + (delete-other-windows window)) + ((eq user-selection nil)) + (t + (funcall user-selection))))))))) + +(defun ide-skel-tabbar-mwheel-scroll-forward (event) + (interactive "@e") + (tabbar-press-scroll-left)) + +(defun ide-skel-tabbar-mwheel-scroll-backward (event) + (interactive "@e") + (tabbar-press-scroll-right)) + +(defun ide-skel-tabbar-mwheel-scroll (event) + "Select the next or previous group of tabs according to EVENT." + (interactive "@e") + (if (tabbar--mwheel-up-p event) + (ide-skel-tabbar-mwheel-scroll-forward event) + (ide-skel-tabbar-mwheel-scroll-backward event))) + +(defun ide-skel-tabbar-mwhell-mode-hook () + (setq tabbar-mwheel-mode-map + (let ((km (make-sparse-keymap))) + (if (get 'mouse-wheel 'event-symbol-elements) + ;; Use one generic mouse wheel event + (define-key km [A-mouse-wheel] + 'ide-skel-tabbar-mwheel-scroll) + ;; Use separate up/down mouse wheel events + (let ((up (tabbar--mwheel-key tabbar--mwheel-up-event)) + (down (tabbar--mwheel-key tabbar--mwheel-down-event))) + (define-key km `[header-line ,down] + 'ide-skel-tabbar-mwheel-scroll-backward) + (define-key km `[header-line ,up] + 'ide-skel-tabbar-mwheel-scroll-forward) + )) + km)) + (setcdr (assoc 'tabbar-mwheel-mode minor-mode-map-alist) tabbar-mwheel-mode-map)) + +(defun ide-skel-tabbar-mode-hook () + (setq tabbar-prefix-map + (let ((km (make-sparse-keymap))) + (define-key km [(control home)] 'tabbar-press-home) + (define-key km [(control left)] 'tabbar-backward) + (define-key km [(control right)] 'tabbar-forward) + (define-key km [(control prior)] 'tabbar-press-scroll-left) + (define-key km [(control next)] 'tabbar-press-scroll-right) + km)) + (setq tabbar-mode-map + (let ((km (make-sparse-keymap))) + (define-key km tabbar-prefix-key tabbar-prefix-map) + km)) + (setcdr (assoc 'tabbar-mode minor-mode-map-alist) tabbar-mode-map)) + +(defun ide-skel-tabbar-init-hook () + (setq tabbar-cycle-scope 'tabs + tabbar-auto-scroll-flag nil) + (setq + tabbar-tab-label-function 'ide-skel-tabbar-tab-label + tabbar-help-on-tab-function 'ide-skel-tabbar-help-on-tab + tabbar-buffer-groups-function 'ide-skel-tabbar-buffer-groups + tabbar-buffer-list-function 'ide-skel-tabbar-buffer-list + tabbar-current-tabset-function 'ide-skel-tabbar-buffer-tabs + tabbar-select-tab-function 'ide-skel-tabbar-select-tab + tabbar-inhibit-functions (append '(ide-skel-tabbar-inhibit-function) + (delq 'tabbar-default-inhibit-function tabbar-inhibit-functions)) + tabbar-home-function 'ide-skel-tabbar-home-function + tabbar-home-help-function (lambda () "Window menu")) + (add-hook 'kill-buffer-hook 'ide-skel-tabbar-buffer-kill-buffer-hook)) + +(defun ide-skel-tabbar-quit-hook () + (setq + tabbar-current-tabset-function nil + tabbar-tab-label-function nil + tabbar-select-tab-function nil + tabbar-help-on-tab-function nil + tabbar-home-function nil + tabbar-home-help-function nil + tabbar-buffer-groups-function nil + tabbar-buffer-list-function nil) + (remove-hook 'kill-buffer-hook 'ide-skel-tabbar-buffer-kill-buffer-hook)) + +(defun ide-skel-tabbar-load-hook () + (add-hook 'tabbar-mode-hook 'ide-skel-tabbar-mode-hook) + (add-hook 'tabbar-mwheel-mode-hook 'ide-skel-tabbar-mwhell-mode-hook) + (add-hook 'tabbar-init-hook 'ide-skel-tabbar-init-hook t) + (add-hook 'tabbar-quit-hook 'ide-skel-tabbar-quit-hook t) + (custom-set-faces + '(tabbar-default ((t (:inherit variable-pitch :background "gray82" :foreground "gray50" :height 0.8)))) + '(tabbar-selected ((t (:inherit tabbar-default :background "white" :foreground "blue" :box (:line-width 1 :color "black"))))) + '(tabbar-separator ((t (:inherit tabbar-default :height 0.2)))) + '(tabbar-highlight ((t ()))) + '(tabbar-button-highlight ((t (:inherit tabbar-button)))) + '(tabbar-unselected ((t (:inherit tabbar-default :background "gray72" :foreground "black" :box (:line-width 1 :color "black")))))) + (ide-skel-tabbar-faces-adapt)) + +(defun ide-skel-tabbar-faces-adapt () + (ide-skel-shine-face-background 'tabbar-default +18) + (set-face-attribute 'tabbar-selected nil :background (face-background 'default)) + (set-face-attribute 'tabbar-selected nil :foreground (face-foreground 'font-lock-function-name-face)) + (set-face-attribute 'tabbar-selected nil :box (list :line-width 1 :color (face-foreground 'default))) + (ide-skel-shine-face-background 'tabbar-unselected +30) + (set-face-attribute 'tabbar-unselected nil :foreground (face-foreground 'default)) + (set-face-attribute 'tabbar-unselected nil :box (list :line-width 1 :color (face-foreground 'default))) + (ide-skel-shine-face-background 'tabbar-button +18) + (ide-skel-shine-face-foreground 'tabbar-button +20)) + +(defun ide-skel-paradox-settings () + ;; hide scroll buttons + (setq tabbar-scroll-left-button (cons (cons "" nil) (cons "" nil)) + tabbar-scroll-right-button (cons (cons "" nil) (cons "" nil)))) + +(ide-skel-paradox-settings) + + +;;; Views + +(defun ide-skel-window-list () + (delq nil + (mapcar (lambda (win) + (unless (memq win ide-skel-ommited-windows) + win)) + (copy-list (window-list nil 1))))) + +(defun ide-skel-next-window (&optional window minibuf all-frames) + (let ((nw (next-window window minibuf all-frames))) + (if (memq nw ide-skel-ommited-windows) + (ide-skel-next-window nw minibuf all-frames) + nw))) + +(defun ide-skel-previous-window (window minibuf all-frames) + (let ((pw (previous-window window minibuf all-frames))) + (if (memq pw ide-skel-ommited-windows) + window + pw))) + +(defun ide-skel-win--absorb-win-node (dest-win-node src-win-node) + (dotimes (index (length src-win-node)) + (setf (elt dest-win-node index) + (elt src-win-node index)))) + +(defun ide-skel-win--create-win-node (object) + (cond ((win-node-p object) (copy-win-node object)) + ((windowp object) + (make-win-node :corner-pos (ide-skel-win-corner object) + :buf-corner-pos (window-start object) + :buffer (window-buffer object) + :horiz-scroll (window-hscroll object) + :point (window-point object) + :mark nil + :edges (window-edges object) + :fixed-size (cdr (assoc (ide-skel-win-corner object) ide-skel--fixed-size-windows)) + :divisions nil)) + (t (error "Argument is not win-not nor window: %S" object)))) + +(defun ide-skel-win--get-corner-pos (object) + (cond ((windowp object) (ide-skel-win-corner object)) + ((win-node-p object) (win-node-corner-pos object)) + ((consp object) object) + (t (error "Invalid arg: %S" object)))) + +(defun ide-skel-win--corner-pos-equal (win-node1 win-node2) + (let ((corner-pos1 (ide-skel-win--get-corner-pos win-node1)) + (corner-pos2 (ide-skel-win--get-corner-pos win-node2))) + (equal corner-pos1 corner-pos2))) + +(defun ide-skel-win--add-division (win-node division &optional at-end-p) + (setf (win-node-divisions win-node) + (if at-end-p + (reverse (cons division (reverse (win-node-divisions win-node)))) + (cons division (win-node-divisions win-node))))) + +(defun ide-skel-win--remove-division (win-node &optional from-end-p) + (let (result) + (if from-end-p + (let ((divs (reverse (win-node-divisions win-node)))) + (setq result (car divs)) + (setf (win-node-divisions win-node) + (reverse (cdr divs)))) + (setq result (car (win-node-divisions win-node))) + (setf (win-node-divisions win-node) (cdr (win-node-divisions win-node)))) + result)) + +(defun ide-skel-win--find-node (root predicate) + "Return node for which predicate returns non-nil." + (when root + (if (funcall predicate root) + root + (some (lambda (division) + (ide-skel-win--find-node (division-win-node division) predicate)) + (win-node-divisions root))))) + +(defun ide-skel-win--find-node-by-corner-pos (root corner-pos) + "Return struct for window with specified corner coordinates." + (setq corner-pos + (cond ((windowp corner-pos) (ide-skel-win-corner corner-pos)) + ((consp corner-pos) corner-pos) + (t (error "arg corner-pos %S is not a pair/window" corner-pos)))) + (ide-skel-win--find-node root + (lambda (win-node) + (equal corner-pos (win-node-corner-pos win-node))))) + +(defun ide-skel-win--get-window-list () + (let* ((start-win (selected-window)) + (cur-win (ide-skel-next-window start-win 1 1)) + (win-list (list start-win))) + (while (not (eq cur-win start-win)) + (setq win-list (cons cur-win win-list)) + (setq cur-win (ide-skel-next-window cur-win 1 1))) + (reverse win-list))) + +(defun ide-skel-win--analysis (&optional window-proc) + ;; (message "ide-skel-win--analysis BEGIN %S" (get-internal-run-time)) + (let ((window-size-fixed nil)) + (setq ide-skel--fixed-size-windows nil) + (dolist (window (copy-list (window-list nil 1))) + (with-selected-window window + (cond ((eq window-size-fixed 'width) + (push (cons (ide-skel-win-corner window) (cons (window-width window) nil)) ide-skel--fixed-size-windows)) + ((eq window-size-fixed 'height) + (push (cons (ide-skel-win-corner window) (cons nil (window-height window))) ide-skel--fixed-size-windows)) + ((not window-size-fixed) + nil) + (t + (push (cons (ide-skel-win-corner window) (cons (window-width window) (window-height window))) ide-skel--fixed-size-windows))))) + (dolist (window (ide-skel-window-list)) + (when (ide-skel-side-view-window-p window) (set-window-dedicated-p window nil))) + (setq ide-skel-win--minibuffer-selected-p (eq (selected-window) (minibuffer-window))) + (when ide-skel-win--minibuffer-selected-p + (select-window (ide-skel-get-editor-window))) + (when (memq (selected-window) ide-skel-ommited-windows) + (select-window (ide-skel-next-window (selected-window) 1 1))) + (let* (leaf-win + (counter 0) + (cursor-alist (mapcar (lambda (win) (prog1 (cons win counter) (incf counter))) (ide-skel-win--get-window-list))) + win-node-set) + (select-window (ide-skel-win-get-upper-left-window)) + (while (setq leaf-win (get-window-with-predicate + (lambda (win) + (if ide-skel-win--win2-switch (ide-skel-win--is-leaf2 win) (ide-skel-win--is-leaf win))) 1 1)) + (let* ((parent-win (ide-skel-previous-window leaf-win 1 1)) + (parent-node (car (member* (ide-skel-win-corner parent-win) win-node-set :test 'ide-skel-win--corner-pos-equal))) + (leaf-node (car (member* (ide-skel-win-corner leaf-win) win-node-set :test 'ide-skel-win--corner-pos-equal)))) + (unless leaf-node + (setq leaf-node (ide-skel-win--create-win-node leaf-win)) + (setf (win-node-cursor-priority leaf-node) (cdr (assq leaf-win cursor-alist))) + (setq win-node-set (adjoin leaf-node win-node-set :test 'ide-skel-win--corner-pos-equal))) + (unless parent-node + (setq parent-node (ide-skel-win--create-win-node parent-win)) + (setf (win-node-cursor-priority parent-node) (cdr (assq parent-win cursor-alist))) + (setq win-node-set (adjoin parent-node win-node-set :test 'ide-skel-win--corner-pos-equal))) + + (let* ((is-horizontal (ide-skel-win--is-adjacent parent-win 'right leaf-win)) + (size (if is-horizontal (window-width parent-win) (window-height parent-win))) + percent) + (setf (win-node-edges leaf-node) (window-edges leaf-win)) + (when window-proc (funcall window-proc parent-win)) + (when window-proc (funcall window-proc leaf-win)) + (delete-window leaf-win) + (when window-proc (funcall window-proc parent-win)) + (setq percent + (/ (float size) (if is-horizontal (window-width parent-win) (window-height parent-win)))) + (ide-skel-win--add-division parent-node + (make-division :win-node leaf-node + :horizontal-p is-horizontal + :percent percent))))) + ;; if there was only one window + (unless win-node-set + (when window-proc (funcall window-proc (selected-window))) + (let ((node (ide-skel-win--create-win-node (selected-window)))) + (setq win-node-set (adjoin node win-node-set + :test 'ide-skel-win--corner-pos-equal)))) + ;; return root node + (let ((root-node (car (member* (ide-skel-win-corner (selected-window)) + win-node-set + :test 'ide-skel-win--corner-pos-equal)))) + (setf (win-node-edges root-node) (window-edges (selected-window))) + ;; (message "ide-skel-win--analysis END %S" (get-internal-run-time)) + root-node)))) + +(defun ide-skel-win-get-upper-left-window () + "Return window in left upper corner" + (let (best-window) + (dolist (win (ide-skel-window-list)) + (if (null best-window) + (setq best-window win) + (let* ((best-window-coords (window-edges best-window)) + (best-window-weight (+ (car best-window-coords) (cadr best-window-coords))) + (win-coords (window-edges win)) + (win-weight (+ (car win-coords) (cadr win-coords)))) + (when (< win-weight best-window-weight) + (setq best-window win))))) + best-window)) + +(defun ide--is-right-window (window) + (let ((bounds (window-edges window)) + (result t)) + (dolist (win (ide-skel-window-list)) + (let ((left-edge-pos (car (window-edges win)))) + (when (>= left-edge-pos (nth 2 bounds)) + (setq result nil)))) + result)) + +(defun ide-skel-get-win-width-delta (window) + (if window-system + (let ((bounds (window-edges window))) + (+ (- (- (nth 2 bounds) (nth 0 bounds)) (window-width window)) + (if (and (not scroll-bar-mode) + (ide--is-right-window window)) + 1 + 0))) + 1)) + +(defun ide-skel-win--split (window horizontal-p percentage) + "Split window and return children." + (let* ((delta (ide-skel-get-win-width-delta window)) + (weight percentage) + (new-size (cond + ((integerp weight) (if (< weight 0) + (if horizontal-p + (+ (window-width window) weight) + (+ (window-height window) weight)) + (if horizontal-p (+ delta weight) weight))) + (t ; float + (when (< weight 0.0) + (setq weight (+ 1.0 weight))) + (if horizontal-p + (round (+ delta (* (window-width window) weight))) + (round (* (window-height window) weight))))))) + (split-window window new-size horizontal-p))) + +(defun ide-skel-win--process-win-node (win win-node &optional window-proc) + (let ((win2 win)) + (set-window-buffer win (win-node-buffer win-node)) + ; (set-window-start win (win-node-buf-corner-pos win-node)) + (set-window-hscroll win (win-node-horiz-scroll win-node)) + (set-window-point win (win-node-point win-node)) + (when window-proc (setq win (funcall window-proc win))) + (dolist (division (win-node-divisions win-node)) + (when (not (null (division-win-node division))) + (let ((child-window (ide-skel-win--split win (division-horizontal-p division) (division-percent division)))) + (when window-proc (setq win (funcall window-proc win))) + (ide-skel-win--process-win-node child-window (division-win-node division) window-proc)))) + (with-selected-window win2 + (let ((fixed-size (win-node-fixed-size win-node)) + (window-size-fixed nil)) + (when fixed-size + (when (car fixed-size) + (enlarge-window (- (car fixed-size) (window-width win2)) t)) + (when (cdr fixed-size) + (enlarge-window (- (cdr fixed-size) (window-height win2)) nil))))) + (when (win-node-cursor-priority win-node) + (unless sel-window + (setq sel-window win + sel-priority (win-node-cursor-priority win-node))) + (when (< (win-node-cursor-priority win-node) sel-priority) + (setq sel-window win + sel-priority (win-node-cursor-priority win-node)))))) + +(defun ide-skel-win--synthesis (window win-node &optional window-proc) + (let ((window-size-fixed nil) + sel-window + sel-priority) + (ide-skel-win--process-win-node window win-node window-proc) + (when sel-window + (select-window sel-window)) + (when ide-skel-win--minibuffer-selected-p + (select-window (minibuffer-window))) + (setq ide-skel-win--minibuffer-selected-p nil) + (dolist (window (ide-skel-window-list)) + (when (ide-skel-side-view-window-p window) (set-window-dedicated-p window t))))) + +(defun ide-skel-win--remove-child (win-node child-win-node) + (if (eq win-node child-win-node) + (let* ((division (ide-skel-win--remove-division win-node t)) + (divisions (win-node-divisions win-node))) + (when division + (ide-skel-win--absorb-win-node win-node (division-win-node division))) + (setf (win-node-divisions win-node) + (append divisions (win-node-divisions win-node)))) + (dolist (division (win-node-divisions win-node)) + (if (and (eq (division-win-node division) child-win-node) (null (win-node-divisions (division-win-node division)))) + (setf (division-win-node division) nil) + (ide-skel-win--remove-child (division-win-node division) child-win-node))))) + +(defun ide-skel-win-remove-window (window) + "Remove window with coordinates WINDOW." + (let* ((window-corner-pos (ide-skel-win-corner window)) + (root-win-node (ide-skel-win--analysis)) + (child-win-node (ide-skel-win--find-node-by-corner-pos root-win-node window-corner-pos))) + (ide-skel-win--remove-child root-win-node child-win-node) + (ide-skel-win--synthesis (selected-window) root-win-node))) + +(defun ide-skel-win-add-window (buffer parent-window-edges edge-symbol size) + "Split PARENT-WINDOW-EDGES window along specified edge. In new window with width/height SIZE +show buffer BUFFER. SIZE can be integer (character count) or float 0.0 - 1.0." + (when (windowp parent-window-edges) + (setq parent-window-edges (window-edges parent-window-edges))) + (let ((horizontal-p (or (eq edge-symbol 'left) (eq edge-symbol 'right))) + (replace-parent-p (or (eq edge-symbol 'top) (eq edge-symbol 'left))) + (percentage + (if (or (eq edge-symbol 'bottom) (eq edge-symbol 'right)) + (- size) + size))) + (ide-skel-win--add-window buffer parent-window-edges horizontal-p percentage replace-parent-p))) + +(defun ide-skel-win--add-window (buffer parent-window-edges horizontal-p percentage replace-parent-p) + (let* ((root-win-node (ide-skel-win--analysis)) + (new-win-node (make-win-node :buffer buffer))) + (ide-skel-win--synthesis (selected-window) root-win-node + (lambda (window) + (if (equal (window-edges window) parent-window-edges) + (let ((child-window (ide-skel-win--split window horizontal-p percentage))) + (set-window-buffer (if replace-parent-p window child-window) buffer) + (if replace-parent-p child-window window)) + window))))) + +(defun ide-skel-win--get-bounds (object) + (cond ((windowp object) (window-edges object)) + ((and (listp object) (= (length object) 4)) object) + (t (error "Invalid object param: %S" object)))) + +(defun ide-skel-win--win-area (window) + (let ((win-bounds (ide-skel-win--get-bounds window))) + (* (- (nth 2 win-bounds) (nth 0 win-bounds)) + (- (nth 3 win-bounds) (nth 1 win-bounds))))) + +(defun ide-skel-win--is-adjacent(window1 edge-symbol window2) + "Non-nil if WINDOW1 sticks to WINDOW2 along specified edge." + (let ((bounds1 (ide-skel-win--get-bounds window1)) + (bounds2 (ide-skel-win--get-bounds window2)) + result) + (if (or (equal edge-symbol 'top) (equal edge-symbol 'bottom)) + (setq result (and + (equal (nth 0 bounds1) (nth 0 bounds2)) ; bounds.LEFT = bounds2.LEFT + (equal (nth 2 bounds1) (nth 2 bounds2)))) ; bounds.RIGHT = bounds2.RIGHT + (setq result (and + (equal (nth 1 bounds1) (nth 1 bounds2)) ; bounds.TOP = bounds2.TOP + (equal (nth 3 bounds1) (nth 3 bounds2))))) ; bounds.BOTTOM = bounds2.BOTTOM + (when result + (setq result + (cond ((equal edge-symbol 'top) (equal (nth 1 bounds1) (nth 3 bounds2))) ; bounds.TOP = bounds2.BOTTOM + ((equal edge-symbol 'bottom) (equal (nth 3 bounds1) (nth 1 bounds2))) ; bounds.BOTTOM = bounds2.TOP + ((equal edge-symbol 'left) (equal (nth 0 bounds1) (nth 2 bounds2))) ; bounds.LEFT = bounds2.RIGHT + (t (equal (nth 2 bounds1) (nth 0 bounds2)))))) + result)) + +(defun ide-skel-win--is-leaf (&optional window) + "Non-nil if WINDOW is a leaf." + (unless window + (setq window (selected-window))) + ;; no window can stick from right or bottom + (when (and (not (get-window-with-predicate + (lambda (win) (ide-skel-win--is-adjacent window 'right win)) 1 1)) + (not (get-window-with-predicate + (lambda (win) (ide-skel-win--is-adjacent window 'bottom win)) 1 1))) + (let ((parent (ide-skel-previous-window window 1 1))) + ;; parent must exist and come from left or up + (when (and parent + (or (ide-skel-win--is-adjacent window 'top parent) + (ide-skel-win--is-adjacent window 'left parent))) + window)))) + +(defun ide-skel-win--is-leaf2 (&optional win2) + "Non-nil if WIN2 is leaf." + (unless win2 + (setq win2 (selected-window))) + ;; no window can stick from right or bottom + (when (and (not (get-window-with-predicate + (lambda (win) (ide-skel-win--is-adjacent win2 'right win)))) + (not (get-window-with-predicate + (lambda (win) (ide-skel-win--is-adjacent win2 'bottom win))))) + (let ((parent (ide-skel-previous-window win2 1 1))) + ;; parent must exist and come from left or up + (when (and parent + (or (ide-skel-win--is-adjacent win2 'top parent) + (ide-skel-win--is-adjacent win2 'left parent))) + win2)))) + +(defun ide-skel-win-corner (window) + (let ((coords (window-edges window))) + (cons (car coords) (cadr coords)))) + +(defun ide-skel-window-size-changed (frame) + (let* ((editor-window (ide-skel-get-editor-window)) + (left-view-window (car ide-skel--current-side-windows)) + (right-view-window (cdr ide-skel--current-side-windows)) + (bottom-view-window (ide-skel-get-bottom-view-window))) + (ide-skel-recalculate-view-cache) + (when bottom-view-window + (ide-skel-remember-bottom-view-window)) + (when left-view-window + (setq ide-skel-left-view-window-width (window-width left-view-window))) + (when right-view-window + (setq ide-skel-right-view-window-width (window-width right-view-window))))) + +(add-hook 'window-size-change-functions 'ide-skel-window-size-changed) + +(setq special-display-regexps ide-skel-bottom-view-buffer-names-regexps) + +(defun ide-skel-recalculate-view-cache () + (setq ide-skel-selected-frame (selected-frame) + ide-skel-current-editor-window (ide-skel-get-editor-window)) + (setq ide-skel-current-editor-buffer (window-buffer ide-skel-current-editor-window) + ide-skel-current-left-view-window (car ide-skel--current-side-windows) + ide-skel-current-right-view-window (cdr ide-skel--current-side-windows))) + +(defun ide-skel-get-last-selected-window () + (and ide-skel-last-selected-window-or-buffer + (or (and (window-live-p (car ide-skel-last-selected-window-or-buffer)) + (car ide-skel-last-selected-window-or-buffer)) + (and (buffer-live-p (cdr ide-skel-last-selected-window-or-buffer)) + (get-buffer-window (cdr ide-skel-last-selected-window-or-buffer)))))) + +(require 'mwheel) + +(defvar ide-skel-mouse-wheel-events (list mouse-wheel-up-event mouse-wheel-down-event)) + +(run-with-idle-timer 0 t (lambda () +;; (when ide-skel-current-left-view-window +;; (with-selected-window ide-skel-current-left-view-window +;; (beginning-of-line))) +;; (when ide-skel-current-right-view-window +;; (with-selected-window ide-skel-current-right-view-window +;; (beginning-of-line))) + (unless (or (active-minibuffer-window) + (memq 'down (event-modifiers last-input-event)) + (memq (event-basic-type last-input-event) ide-skel-mouse-wheel-events) + (mouse-movement-p last-input-event)) + ;; selected frame changed? + (unless (eq (selected-frame) ide-skel-selected-frame) + (ide-skel-recalculate-view-cache)) + ;; side view windows cannot have cursor + (while (memq (selected-window) (list ide-skel-current-left-view-window + ide-skel-current-right-view-window)) + (let ((win (ide-skel-get-last-selected-window))) + (if (and win (not (eq (selected-window) win))) + (select-window win) + (other-window 1)))) + (setq ide-skel-last-selected-window-or-buffer + (cons (selected-window) (window-buffer (selected-window)))) + ;; current buffer changed? + (let ((editor-buffer (window-buffer ide-skel-current-editor-window))) + (when (not (eq ide-skel-last-buffer-change-event editor-buffer)) + (ide-skel-send-event nil 'editor-buffer-changed ide-skel-last-buffer-change-event editor-buffer)))))) + +(setq special-display-function + (lambda (buffer &optional data) + (let ((bottom-view-window (ide-skel-get-bottom-view-window))) + (if (and bottom-view-window + (eq bottom-view-window (selected-window)) + (member (buffer-name buffer) ide-skel-unexpected-bottom-view-window-buffer-names)) + (progn + (show-buffer (ide-skel-get-editor-window) buffer) + (ide-skel-get-editor-window)) + (unless (ide-skel-get-bottom-view-window) + (ide-skel-show-bottom-view-window)) + (set-window-buffer (ide-skel-get-bottom-view-window) buffer) + ;; (select-window (ide-skel-get-bottom-view-window)) + (ide-skel-get-bottom-view-window))))) + +;;; Bottom view + +(defun ide-skel-hidden-buffer-name-p (buffer-name) + (equal (elt buffer-name 0) 32)) + +(defun ide-skel-bottom-view-buffer-p (buffer) + "Non-nil if buffer should be shown in bottom view." + (let ((name (buffer-name buffer))) + (or (with-current-buffer buffer + (and ide-skel-tabset-name + (string= ide-skel-tabset-name ide-skel-bottom-view-window-tabset-name))) + (and (not (ide-skel-hidden-buffer-name-p name)) + (some (lambda (regexp) (string-match regexp name)) ide-skel-bottom-view-buffer-names-regexps) + (not (some (lambda (regexp) (string-match regexp name)) ide-skel-bottom-view-buffer-names-disallowed-regexps)))))) + +(defun ide-skel-remember-bottom-view-window () + (let ((bottom-view-window (ide-skel-get-bottom-view-window))) + (when bottom-view-window + (setq ide-skel--last-bottom-view-buffer-name (buffer-name (window-buffer bottom-view-window)) + ide-skel-bottom-view-window-size (max 5 (window-height bottom-view-window)))))) + +(defun ide-skel--find-buffer-for-bottom-view-window () + "Returns first buffer to display in bottom view window (always returns a buffer)." + (let ((best-buffers (list (car (buffer-list (selected-frame)))))) + (some (lambda (buffer) + (when (ide-skel-bottom-view-buffer-p buffer) + (if (member (buffer-name buffer) ide-skel-unexpected-bottom-view-window-buffer-names) + (setq best-buffers (append best-buffers (list buffer))) + (setq best-buffers (cons buffer best-buffers))) + nil)) + (buffer-list (selected-frame))) + (if (and (not ide-skel-was-scratch) + (get-buffer "*scratch*")) + (progn + (setq ide-skel-was-scratch t) + (get-buffer "*scratch*")) + (car best-buffers)))) + +(defun ide-skel--is-full-width-window (window &rest except-windows) + (let ((bounds (window-edges window)) + (result t)) + (dolist (win (ide-skel-window-list)) + (unless (memq win except-windows) + (let ((left-edge-pos (car (window-edges win)))) + (when (or (< left-edge-pos (car bounds)) + (>= left-edge-pos (nth 2 bounds))) + (setq result nil))))) + result)) + +(defun ide-skel-get-bottom-view-window () + (let* ((editor-window (ide-skel-get-editor-window)) + best-window) + ;; get lowest window + (dolist (win (copy-list (window-list nil 1))) + (when (with-current-buffer (window-buffer win) + (and (or (not ide-skel-tabset-name) + (equal ide-skel-tabset-name ide-skel-bottom-view-window-tabset-name)) + (not (eq win editor-window)))) + (if (null best-window) + (setq best-window win) + (when (> (cadr (window-edges win)) (cadr (window-edges best-window))) + (setq best-window win))))) + (when (and best-window + (not (ide-skel--is-full-width-window best-window (ide-skel-get-left-view-window) (ide-skel-get-right-view-window)))) + (setq best-window nil)) + best-window)) + +(defun ide-skel-show-bottom-view-window (&optional buffer) + (interactive) + (unless ide-skel-bottom-view-window-oper-in-progress + (let ((saved-window (cons (selected-window) (window-buffer (selected-window))))) + (unwind-protect + (unless (ide-skel-get-bottom-view-window) ;; if not open yet + (setq ide-skel-bottom-view-window-oper-in-progress t) + (unless buffer + (setq buffer + (or (and ide-skel--last-bottom-view-buffer-name (get-buffer ide-skel--last-bottom-view-buffer-name)) + (ide-skel--find-buffer-for-bottom-view-window)))) + (let* ((left-view-window (ide-skel-get-left-view-window)) + (left-view-window-bounds (and left-view-window + (window-edges left-view-window))) + (right-view-window (ide-skel-get-right-view-window)) + (right-view-window-bounds (and right-view-window + (window-edges right-view-window))) + (root-win-node (ide-skel-win--analysis)) + (window-bounds (window-edges (selected-window)))) ; bounds of maximized window (after analysis) + (when (and left-view-window-bounds (not ide-skel-bottom-view-on-left-view)) + (setf (nth 0 window-bounds) (nth 2 left-view-window-bounds))) + (when (and right-view-window-bounds (not ide-skel-bottom-view-on-right-view)) + (setf (nth 2 window-bounds) (nth 0 right-view-window-bounds))) + (ide-skel-win--synthesis (selected-window) root-win-node) + (let ((ide-skel-win--win2-switch (and (not (null left-view-window)) + ide-skel-bottom-view-on-right-view)) + (old ide-skel-ommited-windows)) + (when (and (not ide-skel-bottom-view-on-left-view) + (not ide-skel-bottom-view-on-right-view) + (ide-skel-get-left-view-window)) + (push (ide-skel-get-left-view-window) ide-skel-ommited-windows)) + (ide-skel-win-add-window buffer window-bounds 'bottom ide-skel-bottom-view-window-size) + (setq ide-skel-ommited-windows old)))) + (if (window-live-p (car saved-window)) + (select-window (car saved-window)) + (when (get-buffer-window (cdr saved-window)) + (select-window (get-buffer-window (cdr saved-window))))) + (setq ide-skel-bottom-view-window-oper-in-progress nil))))) + +(defun ide-skel-hide-bottom-view-window () + (interactive) + (unless ide-skel-bottom-view-window-oper-in-progress + (setq ide-skel-bottom-view-window-oper-in-progress t) + (let ((bottom-view-window (ide-skel-get-bottom-view-window))) + (when bottom-view-window + (let ((ide-skel-win--win2-switch nil) + (select-editor (eq bottom-view-window (selected-window)))) + (ide-skel-remember-bottom-view-window) + (ide-skel-win-remove-window bottom-view-window) + (when select-editor (select-window (ide-skel-get-editor-window)))))) + (setq ide-skel-bottom-view-window-oper-in-progress nil))) + +(defun ide-skel-toggle-bottom-view-window () + "Toggle bottom view window." + (interactive) + (if (ide-skel-get-bottom-view-window) + (ide-skel-hide-bottom-view-window) + (ide-skel-show-bottom-view-window))) + +;;; Editor + +(defun ide-skel-get-editor-window () + (let (best-window) + (setq ide-skel--current-side-windows (cons nil nil)) + (dolist (win (copy-list (window-list nil 1))) + (when (with-current-buffer (window-buffer win) + (when (equal ide-skel-tabset-name ide-skel-left-view-window-tabset-name) + (setcar ide-skel--current-side-windows win)) + (when (equal ide-skel-tabset-name ide-skel-right-view-window-tabset-name) + (setcdr ide-skel--current-side-windows win)) + (or (not ide-skel-tabset-name) + (equal ide-skel-tabset-name ide-skel-editor-window-tabset-name))) + (if (null best-window) + (setq best-window win) + (let* ((best-window-coords (window-edges best-window)) + (win-coords (window-edges win))) + (when (or (< (cadr win-coords) (cadr best-window-coords)) + (and (= (cadr win-coords) (cadr best-window-coords)) + (< (car win-coords) (car best-window-coords)))) + (setq best-window win)))))) + best-window)) + +;;; Left view & Right view + +(defun ide-skel-toggle-side-view-window (name &optional run-hooks) + (if (funcall (intern (format "ide-skel-get-%s-view-window" name))) + (funcall (intern (format "ide-skel-hide-%s-view-window" name)) run-hooks) + (funcall (intern (format "ide-skel-show-%s-view-window" name)) run-hooks))) + +(defun ide-skel-toggle-left-view-window () + (interactive) + (ide-skel-toggle-side-view-window 'left (interactive-p))) + +(defun ide-skel-toggle-right-view-window () + (interactive) + (ide-skel-toggle-side-view-window 'right (interactive-p))) + + +(add-hook 'kill-buffer-hook (lambda () + (when (eq ide-skel-current-editor-buffer (current-buffer)) + (let* ((context (gethash ide-skel-current-editor-buffer ide-skel-context-properties)) + (imenu-buffer (cdr (assq :imenu-buffer context))) + (imenu-window (when imenu-buffer (get-buffer-window imenu-buffer)))) + (when imenu-window + (set-window-dedicated-p imenu-window nil) + (set-window-buffer imenu-window ide-skel-default-right-view-buffer) + (set-window-dedicated-p imenu-window t)) + (remhash (current-buffer) ide-skel-context-properties) + (when imenu-buffer + (kill-buffer imenu-buffer)))))) + +(defun ide-skel-send-event (side-symbol event-type &rest params) + (ide-skel-recalculate-view-cache) + (cond ((eq event-type 'hide) + (run-hook-with-args-until-success 'ide-skel-side-view-window-functions side-symbol 'hide) + (ide-skel-disable-nonactual-side-view-tabs side-symbol 'disable-all)) + ((eq event-type 'show) + (run-hook-with-args-until-success 'ide-skel-side-view-window-functions side-symbol 'show) + (ide-skel-side-window-switch-to-buffer (symbol-value (intern (format "ide-skel-current-%s-view-window" side-symbol))) nil)) + ((eq event-type 'editor-buffer-changed) + (run-hooks 'ide-skel-editor-buffer-changed-hook) + (when ide-skel-current-left-view-window + (ide-skel-disable-nonactual-side-view-tabs 'left) + (run-hook-with-args-until-success 'ide-skel-side-view-window-functions + 'left 'editor-buffer-changed + ide-skel-last-buffer-change-event ide-skel-current-editor-buffer) + (ide-skel-side-window-switch-to-buffer ide-skel-current-left-view-window nil)) + (when ide-skel-current-right-view-window + (ide-skel-disable-nonactual-side-view-tabs 'right) + (run-hook-with-args-until-success 'ide-skel-side-view-window-functions + 'right 'editor-buffer-changed + (car params) (cadr params)) + (ide-skel-side-window-switch-to-buffer ide-skel-current-right-view-window nil)) + (setq ide-skel-last-buffer-change-event ide-skel-current-editor-buffer)) + ((eq event-type 'tab-change) + (run-hook-with-args-until-success 'ide-skel-side-view-window-functions side-symbol 'tab-change (car params) (cadr params))))) + +(defun ide-skel-hide-side-view-window (name &optional run-hooks) + (let* ((view-window (funcall (intern (format "ide-skel-get-%s-view-window" name)))) + (select-editor (eq view-window (selected-window)))) + (when view-window + (when (active-minibuffer-window) + (error "Cannot remove side window while minibuffer is active")) + (let* ((bottom-view-window (ide-skel-get-bottom-view-window)) + (selected-bottom-view-window (and bottom-view-window (eq bottom-view-window (selected-window)))) + (buffer (window-buffer view-window)) + (second-side-window (funcall (intern (format "ide-skel-get-%s-view-window" (if (eq name 'left) 'right 'left)))))) + (set (intern (format "ide-skel-last-%s-view-buffer" name)) buffer) + (when run-hooks + (ide-skel-send-event name 'hide)) + (when bottom-view-window + (ide-skel-hide-bottom-view-window)) + (when second-side-window + (push second-side-window ide-skel-ommited-windows)) + (let ((ide-skel-win--win2-switch (eq name 'left))) + (set (intern (format "ide-skel-%s-view-window-width" name)) (window-width view-window)) + (ide-skel-win-remove-window view-window)) + (setq ide-skel-ommited-windows nil) + (when bottom-view-window + (ide-skel-show-bottom-view-window) + (when selected-bottom-view-window + (select-window (ide-skel-get-bottom-view-window)))) + (ide-skel-recalculate-view-cache) + (when select-editor (select-window (ide-skel-get-editor-window))))))) + +(defun ide-skel-hide-left-view-window (&optional run-hooks) + (interactive) + (let ((right-view-window (ide-skel-get-right-view-window))) + (when right-view-window + (ide-skel-hide-right-view-window)) + (ide-skel-hide-side-view-window 'left (or run-hooks (interactive-p))) + (when right-view-window + (ide-skel-show-right-view-window)))) + +(defun ide-skel-hide-right-view-window (&optional run-hooks) + (interactive) + (ide-skel-hide-side-view-window 'right (or (interactive-p) run-hooks))) + +(defun ide-skel-get-side-view-buffer-create (name side-sym tab-label help-string keep-condition-function) + (let* ((was-buffer (get-buffer name)) + (km (make-sparse-keymap)) + (buffer (get-buffer-create name))) + (unless was-buffer + (with-current-buffer buffer + (kill-all-local-variables) + (remove-overlays) + (define-key km [drag-mouse-1] 'ignore) + (use-local-map km) + (make-local-variable 'mouse-wheel-scroll-amount) + (make-local-variable 'auto-hscroll-mode) + (make-local-variable 'hscroll-step) + (make-local-variable 'hscroll-margin) + (setq ide-skel-tabset-name (if (eq side-sym 'left) ide-skel-left-view-window-tabset-name ide-skel-right-view-window-tabset-name) + ide-skel-tabbar-tab-label tab-label + ide-skel-tabbar-tab-help-string help-string + ide-skel-keep-condition-function keep-condition-function + auto-hscroll-mode nil + hscroll-step 0.0 + hscroll-margin 0 +;; left-fringe-width 0 +;; right-fringe-width 0 + buffer-read-only t + mode-line-format " " + mouse-wheel-scroll-amount '(1) + window-size-fixed 'width) + ;; (make-variable-buffer-local 'fringe-indicator-alist) + (setq fringe-indicator-alist (copy-alist default-fringe-indicator-alist)) +;; (when (>= emacs-major-version 22) +;; (set 'indicate-buffer-boundaries '((up . left) (down . left)))) + (setcdr (assq 'truncation fringe-indicator-alist) nil) + (set (make-local-variable 'scroll-conservatively) 1500) ; much greater than 0 + (when (and window-system + (not ide-skel-side-view-display-cursor)) + (setq cursor-type nil)))) + buffer)) + +(defvar ide-skel-default-left-view-buffer + (let ((buffer (ide-skel-get-side-view-buffer-create " Default Left View Buffer" 'left nil nil (lambda (buf) t)))) + (with-current-buffer buffer + (setq header-line-format " ")) + buffer)) +(defvar ide-skel-last-left-view-buffer ide-skel-default-left-view-buffer) +(defvar ide-skel-default-right-view-buffer + (let ((buffer (ide-skel-get-side-view-buffer-create " Default Right View Buffer" 'right nil nil (lambda (buf) t)))) + (with-current-buffer buffer + (setq header-line-format " ")) + buffer)) +(defvar ide-skel-last-right-view-buffer ide-skel-default-right-view-buffer) + +(defun ide-skel-show-side-view-window (name &optional run-hooks) + (unless (funcall (intern (format "ide-skel-get-%s-view-window" name))) + (let* ((current-buffer (window-buffer (selected-window))) + (bottom-view-window (ide-skel-get-bottom-view-window)) + root-win-node + (bottom-view-window-bounds (and (or (symbol-value (intern (format "ide-skel-bottom-view-on-%s-view" name))) + (and ide-skel-bottom-view-on-left-view + (not ide-skel-bottom-view-on-right-view))) + bottom-view-window + (window-edges bottom-view-window))) + best-window-bounds) + (when bottom-view-window-bounds + (ide-skel-hide-bottom-view-window)) + (let ((second-side-window (funcall (intern (format "ide-skel-get-%s-view-window" (if (eq name 'left) 'right 'left)))))) + (when second-side-window + (push second-side-window ide-skel-ommited-windows)) + (setq root-win-node (ide-skel-win--analysis)) + (setq best-window-bounds (window-edges (selected-window))) ; bounds of maximized window (after analysis) + (ide-skel-win--synthesis (selected-window) root-win-node) + (ide-skel-win-add-window + (symbol-value (intern (format (if run-hooks "ide-skel-default-%s-view-buffer" "ide-skel-last-%s-view-buffer") name))) + best-window-bounds name + (symbol-value (intern (format "ide-skel-%s-view-window-width" name)))) + (setq ide-skel-ommited-windows nil) + (when bottom-view-window-bounds + (ide-skel-show-bottom-view-window)) + (set-window-dedicated-p (funcall (intern (format "ide-skel-get-%s-view-window" name))) t) + (when run-hooks + (dolist (tab (tabbar-tabs (tabbar-get-tabset (symbol-value (intern (format "ide-skel-%s-view-window-tabset-name" name)))))) + (tabbar-delete-tab tab)) + (ide-skel-send-event name 'show)) + (some (lambda (win) (when (eq (window-buffer win) current-buffer) (select-window win) t)) (copy-list (window-list nil 1))))))) + +;; Disables from view all buffers for which keep condition function +;; returns nil. If a current buffer is there, select another enabled, +;; which implies tab-change event, then select any enabled buffer. +(defun ide-skel-disable-nonactual-side-view-tabs (name &optional disable-all) + (let* ((tabset (tabbar-get-tabset (symbol-value (intern (format "ide-skel-%s-view-window-tabset-name" name))))) + (tabs (tabbar-tabs tabset)) + (editor-buffer (window-buffer (ide-skel-get-editor-window))) + selected-deleted + (selected-tab (tabbar-selected-tab tabset))) + (when tabs + (dolist (tab tabs) + (let ((buffer (tabbar-tab-value tab))) + (with-current-buffer buffer + (when (or disable-all + (not ide-skel-keep-condition-function) + (not (funcall ide-skel-keep-condition-function editor-buffer))) + (setq ide-skel-tabbar-enabled nil) + (when (eq tab selected-tab) + (setq selected-deleted t)) + (tabbar-delete-tab tab))))) + (let ((selected-buffer (when (and (not selected-deleted) + (tabbar-tabs tabset) (tabbar-selected-value tabset))))) + (when (and (not disable-all) + (or selected-deleted + (not (eq (tabbar-selected-tab tabset) selected-tab)))) + (unless selected-buffer + (setq selected-buffer (symbol-value (intern (format "ide-skel-default-%s-view-buffer" name))))) + (ide-skel-side-window-switch-to-buffer + (symbol-value (intern (format "ide-skel-current-%s-view-window" name))) + selected-buffer)))))) + +(defun ide-skel-show-left-view-window (&optional run-hooks) + (interactive) + (let ((right-view-window (ide-skel-get-right-view-window))) + (when right-view-window + (ide-skel-hide-right-view-window)) + (ide-skel-show-side-view-window 'left (or run-hooks (interactive-p))) + (when right-view-window + (ide-skel-show-right-view-window)))) + +(defun ide-skel-show-right-view-window (&optional run-hooks) + (interactive) + (ide-skel-show-side-view-window 'right (or run-hooks (interactive-p)))) + +(defun ide-skel-get-side-view-window (name) + (let ((tabset-name (symbol-value (intern (format "ide-skel-%s-view-window-tabset-name" name))))) + (some (lambda (win) + (when (with-current-buffer (window-buffer win) + (equal ide-skel-tabset-name tabset-name)) + win)) + (copy-list (window-list nil 1))))) + +(defun ide-skel-get-left-view-window () + (ide-skel-get-side-view-window 'left)) + +(defun ide-skel-get-right-view-window () + (ide-skel-get-side-view-window 'right)) + +(defun ide-skel-get-side-view-windows () + (let (result + (left-view-win (ide-skel-get-left-view-window)) + (right-view-win (ide-skel-get-right-view-window))) + (when left-view-win (push left-view-win result)) + (when right-view-win (push right-view-win result)) + result)) + +(defun ide-skel-side-view-window-p (window) + (ide-skel-side-view-buffer-p (window-buffer window))) + +(defun ide-skel-side-view-buffer-p (buffer) + (with-current-buffer buffer + (or (equal ide-skel-tabset-name ide-skel-left-view-window-tabset-name) + (equal ide-skel-tabset-name ide-skel-right-view-window-tabset-name)))) + +(defadvice delete-window (around delete-window-around-advice (&optional window)) + (let* ((target-window (if window window (selected-window))) + (editor-window (and (interactive-p) (ide-skel-get-editor-window))) ; for ide-skel--current-side-windows (side-effects) + (hide-view-windows (and (interactive-p) + (not (eq (car ide-skel--current-side-windows) target-window)) + (not (eq (cdr ide-skel--current-side-windows) target-window)))) + (hide-left-view-window (and hide-view-windows (car ide-skel--current-side-windows))) + (hide-right-view-window (and hide-view-windows (cdr ide-skel--current-side-windows))) + result) + (when (interactive-p) + (if (eq (car ide-skel--current-side-windows) target-window) + (ide-skel-send-event 'left 'hide) + (when (eq (cdr ide-skel--current-side-windows) target-window) + (ide-skel-send-event 'right 'hide)))) + (let* ((edges (window-inside-edges window)) + (buf (window-buffer window)) + win + (center-position (cons (/ (+ (car edges) (caddr edges)) 2) + (/ (+ (cadr edges) (cadddr edges)) 2)))) + (when hide-left-view-window (ide-skel-hide-left-view-window)) + (when hide-right-view-window (ide-skel-hide-right-view-window)) + (setq win (window-at (car center-position) (cdr center-position))) + (when (eq (window-buffer win) buf) + (setq window (window-at (car center-position) (cdr center-position))))) + (unwind-protect + (setq result (progn ad-do-it)) + (when hide-left-view-window (ide-skel-show-left-view-window)) + (when hide-right-view-window (ide-skel-show-right-view-window))) + result)) +(ad-activate 'delete-window) + +(defadvice delete-other-windows (around delete-other-windows-around-advice (&optional window)) + (ide-skel-assert-not-in-side-view-window) + (let* ((editor-window (ide-skel-get-editor-window)) + (dont-revert-after (and (interactive-p) (listp current-prefix-arg) (car current-prefix-arg))) ; C-u + (hide-left-view-window (and (interactive-p) (car ide-skel--current-side-windows))) + (hide-right-view-window (and (interactive-p) (cdr ide-skel--current-side-windows))) + result) + (when hide-left-view-window (ide-skel-hide-left-view-window dont-revert-after)) + (when hide-right-view-window (ide-skel-hide-right-view-window dont-revert-after)) + (unwind-protect + (setq result (progn ad-do-it)) + (when (not dont-revert-after) + (when hide-left-view-window + (ide-skel-show-left-view-window)) + (when hide-right-view-window + (ide-skel-show-right-view-window)))) + result)) +(ad-activate 'delete-other-windows) + +(defun ide-skel-assert-not-in-side-view-window () + (when (and (interactive-p) (ide-skel-side-view-window-p (selected-window))) + (error "Cannot do it"))) + +(defadvice kill-buffer (before kill-buffer-before-advice (buffer)) + (ide-skel-assert-not-in-side-view-window)) +(ad-activate 'kill-buffer) + +(defadvice split-window-vertically (before split-window-vertically-before-advice (&optional size)) + (ide-skel-assert-not-in-side-view-window)) +(ad-activate 'split-window-vertically) + +(defadvice split-window-horizontally (before split-window-horizontally-before-advice (&optional size)) + (ide-skel-assert-not-in-side-view-window)) +(ad-activate 'split-window-horizontally) + +(defadvice mouse-drag-vertical-line (around mouse-drag-vertical-line-around-advice (start-event)) + (let* ((editor-window (ide-skel-get-editor-window)) + (left-view-window (car ide-skel--current-side-windows)) + (right-view-window (cdr ide-skel--current-side-windows))) + (when left-view-window (with-selected-window left-view-window (setq window-size-fixed nil))) + (when right-view-window (with-selected-window right-view-window (setq window-size-fixed nil))) + (unwind-protect + (progn ad-do-it) + (when left-view-window (with-selected-window left-view-window (setq window-size-fixed 'width))) + (when right-view-window (with-selected-window right-view-window (setq window-size-fixed 'width)))))) +(ad-activate 'mouse-drag-vertical-line) + +(defadvice other-window (after other-window-after-advice (arg &optional all-frames)) + (if (memq (selected-window) (list ide-skel-current-left-view-window ide-skel-current-right-view-window)) + (other-window arg all-frames) + ad-return-value)) +(ad-activate 'other-window) + +;; Buffer list buffer (left side view) + +(define-derived-mode fundmental-mode + fundamental-mode "Fundmental") + +(setq default-major-mode 'fundmental-mode) + +(defun ide-skel-recentf-closed-files-list () + "Lista ostatnio otwieranych, ale aktualnie zamknietych plikow" + (let* ((open-file-paths (delq nil (mapcar (lambda (buffer) (buffer-file-name buffer)) (buffer-list))))) + (if (featurep 'recentf) + (sort (reverse (set-difference recentf-list open-file-paths :test 'string=)) + (lambda (path1 path2) + (string< (file-name-nondirectory path1) (file-name-nondirectory path2)))) + nil))) + +(defun ide-skel-select-buffer (buffer-or-path &optional line-no) + (let* ((window (ide-skel-get-last-selected-window)) + (buffer (or (and (bufferp buffer-or-path) buffer-or-path) + (find-file-noselect buffer-or-path))) + (is-bottom-view-buffer (ide-skel-bottom-view-buffer-p buffer))) + (when (not (buffer-live-p buffer)) + (error "Buffer %s is dead" buffer)) + (unless (get-buffer-window buffer) + ;; (message "%S %S" window (ide-skel-get-bottom-view-window)) + (if (and window + (not (eq window (ide-skel-get-bottom-view-window))) + (not is-bottom-view-buffer)) + (set-window-buffer window buffer) + (let ((editor-window (ide-skel-get-editor-window))) + (select-window editor-window) + (if is-bottom-view-buffer + (switch-to-buffer-other-window buffer) + (set-window-buffer editor-window buffer))))) + (setq ide-skel-last-selected-window-or-buffer (cons (get-buffer-window buffer) buffer)) + (select-window (car ide-skel-last-selected-window-or-buffer)) + (when line-no + (with-current-buffer buffer + (goto-line line-no))))) + +(defun ide-skel-select-buffer-handler (event) + (interactive "@e") + ;; (message "EVENT: %S" event) + (with-selected-window (posn-window (event-start event)) + (let* ((object (get-text-property (posn-point (event-start event)) 'object-to-display))) + (beginning-of-line) + (ide-skel-select-buffer object)))) + +(defun ide-skel-buffers-view-insert-buffer-list (label buffer-list) + (setq label (propertize label 'face 'bold)) + (insert (format "%s\n" label)) + (dolist (object buffer-list) + (let* ((label (format " % -100s" (if (bufferp object) (buffer-name object) (file-name-nondirectory object)))) + (km (make-sparse-keymap))) + (define-key km [mouse-1] 'ide-skel-select-buffer-handler) + (setq label (propertize label + 'mouse-face 'ide-skel-highlight-face + 'local-map km + 'face 'variable-pitch + 'pointer 'hand + 'object-to-display object + 'help-echo (if (bufferp object) (buffer-file-name object) object))) + (insert label) + (insert "\n")))) + +(defun ide-skel-buffers-view-fill () + (when ide-skel-current-left-view-window + (with-current-buffer ide-skel-buffer-list-buffer + (let ((point (point)) + (window-start (when (eq (window-buffer ide-skel-current-left-view-window) ide-skel-buffer-list-buffer) + (save-excursion + (goto-char (window-start ide-skel-current-left-view-window)) + (cons (line-number-at-pos) (current-column)))))) + ;; (message "%S" window-start) + (let (asterisk-buffers + (inhibit-read-only t) + normal-buffers) + (erase-buffer) + (dolist (buffer (sort (buffer-list) (lambda (buf1 buf2) (string< (buffer-name buf1) (buffer-name buf2))))) + (let* ((name (buffer-name buffer)) + (first-char (aref (buffer-name buffer) 0))) + (unless (char-equal ?\ first-char) + (if (char-equal ?* first-char) + (push buffer asterisk-buffers) + (push buffer normal-buffers))))) + (ide-skel-buffers-view-insert-buffer-list "Normal Buffers:" normal-buffers) + (ide-skel-buffers-view-insert-buffer-list "Scratch Buffers:" asterisk-buffers) + (ide-skel-buffers-view-insert-buffer-list "Recent Files:" (ide-skel-recentf-closed-files-list))) + (if window-start + (let ((pos (save-excursion + (goto-line (car window-start)) + (beginning-of-line) + (forward-char (cdr window-start)) + (point)))) + (set-window-start ide-skel-current-left-view-window pos)) + (goto-char point) + (beginning-of-line)))))) + +(defun ide-skel-some-view-window-buffer (side-symbol predicate) + (some (lambda (buffer) + (and (buffer-live-p buffer) + (with-current-buffer buffer + (and (equal ide-skel-tabset-name (symbol-value (intern (format "ide-skel-%s-view-window-tabset-name" side-symbol)))) + ide-skel-tabbar-enabled + (funcall predicate buffer) + buffer)))) + (buffer-list))) + +(defun ide-skel-side-window-switch-to-buffer (side-window buffer) + "If BUFFER is nil, then select any non-default buffer. The +TAB-CHANGE event is send only if selected buffer changed." + (unwind-protect + (let* ((side-symbol (cond ((eq side-window ide-skel-current-left-view-window) 'left) + ((eq side-window ide-skel-current-right-view-window) 'right) + (t nil))) + (context (gethash ide-skel-current-editor-buffer ide-skel-context-properties)) + (context-default-tab-label-symbol (intern (format "default-%s-tab-label" side-symbol)))) + (when side-symbol + (unless buffer + (let* ((default-empty-buffer (symbol-value (intern (format "ide-skel-default-%s-view-buffer" side-symbol)))) + (context-default-tab-label (cdr (assq context-default-tab-label-symbol context))) + (last-view-window-tab-label (symbol-value (intern (format "ide-skel-last-%s-view-window-tab-label" side-symbol))))) + ;; first non-nil: + ;; - selected before in this context + ;; - selected in previous context + ;; - current if other than default-empty + ;; - first non default-empty + ;; - default-empty + (setq buffer + (or (and context-default-tab-label + (ide-skel-some-view-window-buffer side-symbol (lambda (buffer) + (equal ide-skel-tabbar-tab-label context-default-tab-label)))) + (and last-view-window-tab-label + (ide-skel-some-view-window-buffer side-symbol (lambda (buffer) + (equal ide-skel-tabbar-tab-label last-view-window-tab-label)))) + (and (not (eq (window-buffer side-window) default-empty-buffer)) + (window-buffer side-window)) + (ide-skel-some-view-window-buffer side-symbol (lambda (buffer) ide-skel-tabbar-tab-label)) + default-empty-buffer)))) + (unless (eq (window-buffer side-window) buffer) + (set (intern (format "ide-skel-last-%s-view-window-tab-label" side-symbol)) (with-current-buffer buffer ide-skel-tabbar-tab-label)) + (setq context (assq-delete-all context-default-tab-label-symbol context)) + (puthash ide-skel-current-editor-buffer + (cons (cons context-default-tab-label-symbol (with-current-buffer buffer ide-skel-tabbar-tab-label)) context) + ide-skel-context-properties) + (ide-skel-send-event side-symbol 'tab-change (window-buffer side-window) buffer))) + (set-window-dedicated-p side-window nil) + (set-window-buffer side-window buffer)) + (set-window-dedicated-p side-window t))) + +;; args: 'left/right 'show/editor-buffer-changed/hide/tab-change &rest buffer... +(defun ide-skel-default-side-view-window-function (side event &rest list) + ;; (message "SIDE: %S, event: %S, rest: %S %S" side event list ide-skel-current-left-view-window) + (when (and (eq side 'left) ide-skel-current-left-view-window) + (cond ((eq event 'show) + (unless ide-skel-buffer-list-buffer + (setq ide-skel-buffer-list-buffer (ide-skel-get-side-view-buffer-create + " Ide-Skel Buffer List Buffer" 'left "Bufs" "List of opened and recent files" + (lambda (buf) t))) + (with-current-buffer ide-skel-buffer-list-buffer + (setq ide-skel-tabbar-enabled t))) + (ide-skel-buffers-view-fill) + (ide-skel-side-window-switch-to-buffer ide-skel-current-left-view-window ide-skel-buffer-list-buffer)))) + nil) + + ;; (message "SIDE: %S, event: %S, rest: %S" side event list) + +(add-hook 'change-major-mode-hook (lambda () (setq ide-skel-buffer-list-tick t))) +(add-hook 'kill-buffer-hook (lambda () (setq ide-skel-buffer-list-tick t))) +(run-with-idle-timer 0.1 t (lambda () + (when ide-skel-buffer-list-tick + (setq ide-skel-buffer-list-tick nil) + (ide-skel-buffers-view-fill)))) + +(add-hook 'ide-skel-side-view-window-functions 'ide-skel-default-side-view-window-function) + +(define-key-after global-map [tool-bar ide-skel-toggle-left-view-window] + (list 'menu-item "Left View Window" 'ide-skel-toggle-left-view-window :image ide-skel-left-view-window-image)) +(define-key-after global-map [tool-bar ide-skel-toggle-bottom-view-window] + (list 'menu-item "Bottom View Window" 'ide-skel-toggle-bottom-view-window :image ide-skel-bottom-view-window-image)) +(define-key-after global-map [tool-bar ide-skel-toggle-right-view-window] + (list 'menu-item "Right View Window" 'ide-skel-toggle-right-view-window :image ide-skel-right-view-window-image)) + +(eval-after-load "tabbar" '(ide-skel-tabbar-load-hook)) + +;;; Tree Widget + +(defadvice tree-widget-lookup-image (around tree-widget-lookup-image-around-advice (name)) + (if (equal (tree-widget-theme-name) "small-folder") + (setq ad-return-value (apply 'create-image (symbol-value (intern (format "ide-skel-tree-widget-%s-xpm" name))) 'xpm t (tree-widget-image-properties name))) + ad-do-it)) +(ad-activate 'tree-widget-lookup-image) + + + +;;; Imenu + +(require 'imenu) + +(defun ide-skel-imenu-refresh () + (interactive) + (ide-skel-imenu-side-view-draw-tree (window-buffer ide-skel-current-right-view-window) t)) + +(defun ide-skel-imenu-sort-change () + (interactive) + (with-current-buffer (window-buffer ide-skel-current-right-view-window) + (setq ide-skel-imenu-sorted (not ide-skel-imenu-sorted))) + (ide-skel-imenu-side-view-draw-tree (window-buffer ide-skel-current-right-view-window) t)) + +(defun ide-skel-imenu-get-buffer-create (editor-buffer &optional dont-create) + (let* ((context (gethash editor-buffer ide-skel-context-properties)) + (buffer (cdr (assq :imenu-buffer context)))) + (when (and (not buffer) (not dont-create)) + (setq buffer (ide-skel-get-side-view-buffer-create (concat " " (buffer-name editor-buffer) " Ide Skel Imenu") + 'right "Imenu" nil + (lambda (editor-buffer) + (eq ide-skel-imenu-editor-buffer ide-skel-current-editor-buffer)))) + (with-current-buffer buffer + (setq ide-skel-tabbar-menu-function + (lambda () + (let ((is-outline-mode (with-current-buffer (window-buffer ide-skel-current-right-view-window) + (with-current-buffer ide-skel-imenu-editor-buffer + (or (eq major-mode 'outline-mode) + (and (boundp 'outline-minor-mode) + (symbol-value 'outline-minor-mode))))))) + (append + (list + (list 'ide-skel-imenu-refresh "Refresh" t) + (unless is-outline-mode + (list 'ide-skel-imenu-sort-change (if (with-current-buffer (window-buffer ide-skel-current-right-view-window) + ide-skel-imenu-sorted) + "Natural order" + "Sorted order") t)))))) + ide-skel-imenu-editor-buffer editor-buffer + ide-skel-imenu-open-paths (make-hash-table :test 'equal)) + (add-hook 'tree-widget-after-toggle-functions (lambda (widget) + (let ((path (widget-get widget :path))) + (when path + (if (widget-get widget :open) + (puthash path t ide-skel-imenu-open-paths) + (remhash path ide-skel-imenu-open-paths))))) + nil t)) + (puthash editor-buffer (cons (cons :imenu-buffer buffer) context) ide-skel-context-properties)) + buffer)) + +(defun ide-skel-tree-node-notify (widget &rest rest) + (let ((index-name (widget-get widget :index-name)) + (index-position (widget-get widget :index-position)) + (function (widget-get widget :function)) + (arguments (widget-get widget :arguments))) + (select-window (ide-skel-get-editor-window)) + (if function + (apply function index-name index-position arguments) + (goto-char index-position)))) + +;; building hash +(defun ide-skel-imenu-analyze (hash prefix element) + (when element + (if (and (consp (cdr element)) + (listp (cadr element))) + (dolist (elem (cdr element)) + (ide-skel-imenu-analyze hash (concat prefix "/" (car element)) elem)) + (puthash (concat prefix "/" (car element)) (list (cons :element element)) hash)))) + +;; logical linking, internal nodes creation +(defun ide-skel-imenu-analyze2 (hash prefix element) + (when element + (if (and (consp (cdr element)) + (listp (cadr element))) + (dolist (elem (cdr element)) + (ide-skel-imenu-analyze2 hash (concat prefix "/" (car element)) elem)) + (let* ((index-name (car element)) + (path (concat prefix "/" index-name)) + (node (gethash path hash)) + (reverse-separators (let ((index 0) + result) + (while (string-match "[*#:.]+" index-name index) + (push (cons (match-beginning 0) (match-end 0)) result) + (setq index (match-end 0))) + result)) + found) + (some (lambda (separator-pair) + (let* ((begin (car separator-pair)) + (end (cdr separator-pair)) + (before-name (substring index-name 0 begin)) + (after-name (substring index-name end)) + (parent-path (concat prefix "/" before-name)) + (parent-node (gethash parent-path hash))) + (when parent-node + (push (cons :parent parent-path) node) + (unless (assq :name node) + (push (cons :name after-name) node)) + (puthash path node hash) + (unless (assq :widget parent-node) + (let* ((parent-element (cdr (assq :element parent-node))) + (parent-index-name (car parent-element)) + (parent-index-position (if (consp (cdr parent-element)) (cadr parent-element) (cdr parent-element))) + (parent-function (when (consp (cdr parent-element)) (caddr parent-element))) + (open-status (gethash parent-path ide-skel-imenu-open-paths)) + (parent-arguments (when (consp (cdr parent-element)) (cdddr parent-element)))) + (push (cons :widget + ;; internal node + (list 'ide-skel-imenu-internal-node-widget + :open open-status + :indent 0 + :path parent-path + :notify 'ide-skel-tree-node-notify + :index-name parent-index-name + :index-position parent-index-position + :function parent-function + :arguments parent-arguments + :node (list 'push-button + :format "%[%t%]\n" + :button-face 'variable-pitch + :tag (or (cdr (assq :name parent-node)) + before-name) + ;; :tag (cadr (assq :element parent-node)) + ))) + parent-node) + (puthash parent-path parent-node hash))) + t))) + reverse-separators))))) + +;; widget linking, leafs creation +(defun ide-skel-imenu-analyze3 (hash prefix element) + (when element + (if (and (consp (cdr element)) + (listp (cadr element))) + (dolist (elem (cdr element)) + (ide-skel-imenu-analyze3 hash (concat prefix "/" (car element)) elem)) + (let* ((index-name (car element)) + (index-position (if (consp (cdr element)) (cadr element) (cdr element))) + (function (when (consp (cdr element)) (caddr element))) + (arguments (when (consp (cdr element)) (cdddr element))) + (path (concat prefix "/" index-name)) + (node (gethash path hash)) + (widget (cdr (assq :widget node))) + (parent-path (cdr (assq :parent node))) + (parent-node (when parent-path (gethash parent-path hash))) + (parent-widget (when parent-node (cdr (assq :widget parent-node))))) + ;; create leaf if not exists + (unless widget + ;; leaf node + (push (cons :widget (list 'ide-skel-imenu-leaf-widget + :notify 'ide-skel-tree-node-notify + :index-name index-name + :index-position index-position + :function function + :arguments arguments + :tag (or (cdr (assq :name node)) + index-name))) + node) + (puthash path node hash) + (setq widget (cdr (assq :widget node)))) + ;; add to parent + (when parent-widget + (setcdr (last parent-widget) (cons widget nil))))))) + +(defun ide-skel-imenu-create-tree (hash prefix element) + (when element + (if (and (consp (cdr element)) + (listp (cadr element))) + (let* ((menu-title (car element)) + (sub-alist (cdr element)) + (path (concat prefix "/" menu-title)) + (open-status (gethash path ide-skel-imenu-open-paths))) + (append + (list 'ide-skel-imenu-internal-node-widget + :open open-status + :indent 0 + :path path + :node (list 'push-button + :format "%[%t%]\n" + :button-face 'variable-pitch + :tag menu-title)) + (delq nil (mapcar (lambda (elem) + (ide-skel-imenu-create-tree hash path elem)) + sub-alist)))) + (let* ((index-name (car element)) + (index-position (if (consp (cdr element)) (cadr element) (cdr element))) + (function (when (consp (cdr element)) (caddr element))) + (arguments (when (consp (cdr element)) (cdddr element))) + (path (concat prefix "/" index-name)) + (node (gethash path hash)) + (parent-path (cdr (assq :parent node))) + (widget (cdr (assq :widget node)))) + (unless parent-path + widget))))) + +(defun ide-skel-imenu-compare (e1 e2) + (let ((ce1 (and (consp (cdr e1)) (listp (cadr e1)))) + (ce2 (and (consp (cdr e2)) (listp (cadr e2))))) + (when ce1 + (setcdr e1 (sort (cdr e1) 'ide-skel-imenu-compare))) + (when ce2 + (setcdr e2 (sort (cdr e2) 'ide-skel-imenu-compare))) + (if (or (and ce1 ce2) + (and (not ce1) (not ce2))) + (string< (car e1) (car e2)) + (and ce1 (not ce2))))) + +(defun ide-skel-outline-tree-create (index-alist) + (let (stack + node-list + (current-depth 0)) + (dolist (element index-alist) + (let ((index-name (car element)) + (index-position (if (consp (cdr element)) (cadr element) (cdr element))) + (function (when (consp (cdr element)) (caddr element))) + (arguments (when (consp (cdr element)) (cdddr element)))) + ;; (message "index-name: %S" index-name) + (string-match "^\\([*]+\\)[ ]*\\(.*\\)$" index-name) + (let* ((depth (length (match-string 1 index-name))) + (name (match-string 2 index-name)) + parent-node + node) + (while (and stack + (>= (caar stack) depth)) + (setq stack (cdr stack))) + (when stack + (setq parent-node (cdar stack)) + (when (eq (car parent-node) 'ide-skel-imenu-leaf-widget) + (let ((path (plist-get (cdr parent-node) :path))) + (setcar parent-node 'ide-skel-imenu-internal-node-widget) + (setcdr parent-node (list :open (gethash path ide-skel-imenu-open-paths) + :indent 0 + :notify 'ide-skel-tree-node-notify + :index-name (plist-get (cdr parent-node) :index-name) + :index-position (plist-get (cdr parent-node) :index-position) + :function (plist-get (cdr parent-node) :function) + :arguments (plist-get (cdr parent-node) :arguments) + :path path + :node (list 'push-button + :format "%[%t%]\n" + :button-face 'variable-pitch + :tag (plist-get (cdr parent-node) :tag))))))) + (setq node (list 'ide-skel-imenu-leaf-widget + :notify 'ide-skel-tree-node-notify + :index-name index-name + :index-position index-position + :function function + :path (concat (plist-get (cdr parent-node) :path) "/" index-name) + :arguments arguments + :tag name)) + (push (cons depth node) stack) + (if parent-node + (setcdr (last parent-node) (cons node nil)) + (push node node-list))))) + (append + (list 'ide-skel-imenu-internal-node-widget + :open t + :indent 0 + :path "" + :tag "") + (reverse node-list)))) + +(defun ide-skel-imenu-side-view-draw-tree (imenu-buffer &optional refresh) + (with-current-buffer imenu-buffer + (let ((index-alist (with-current-buffer ide-skel-imenu-editor-buffer + (when refresh + (imenu--cleanup) + (setq imenu--index-alist nil)) + (cons "" (progn + (unless imenu--index-alist + (font-lock-default-fontify-buffer) + (condition-case err + (imenu--make-index-alist t) + (error nil))) + imenu--index-alist)))) + (is-outline-mode (with-current-buffer ide-skel-imenu-editor-buffer + (or (eq major-mode 'outline-mode) + (and (boundp 'outline-minor-mode) + (symbol-value 'outline-minor-mode))))) + (inhibit-read-only t) + (hash (make-hash-table :test 'equal)) + (start-line (save-excursion + (goto-char (window-start ide-skel-current-right-view-window)) + (line-number-at-pos)))) + (unless is-outline-mode + (when ide-skel-imenu-sorted + (setq index-alist (cons "" (sort (copy-tree (cdr index-alist)) 'ide-skel-imenu-compare)))) + (ide-skel-imenu-analyze hash "/" index-alist) + (ide-skel-imenu-analyze2 hash "/" index-alist) + (ide-skel-imenu-analyze3 hash "/" index-alist)) + (let ((tree (if is-outline-mode + (ide-skel-outline-tree-create (cdr index-alist)) + (ide-skel-imenu-create-tree hash "/" index-alist)))) + (plist-put (cdr tree) :open t) + (plist-put (cdr tree) :indent 0) + (erase-buffer) + (tree-widget-set-theme "small-folder") + (widget-create tree) + (set-keymap-parent (current-local-map) tree-widget-button-keymap) + (widget-setup) + (goto-line start-line) + (beginning-of-line) + (set-window-start ide-skel-current-right-view-window (point)))))) + +(defun ide-skel-imenu-side-view-window-function (side event &rest list) + ;; (message "%S %S %S" side event list) + (when (and (eq side 'right) + ide-skel-current-right-view-window) + (let ((imenu-buffer (ide-skel-imenu-get-buffer-create ide-skel-current-editor-buffer t))) + (when (memq event '(show editor-buffer-changed)) + (when (ide-skel-has-imenu ide-skel-current-editor-buffer) + (unless imenu-buffer + (setq imenu-buffer (ide-skel-imenu-get-buffer-create ide-skel-current-editor-buffer))) + (with-current-buffer imenu-buffer + (setq ide-skel-tabbar-enabled t)))) + (when (and imenu-buffer + (eq event 'tab-change) + (eq (cadr list) imenu-buffer)) + (with-current-buffer imenu-buffer + (when (= (buffer-size) 0) + (ide-skel-imenu-side-view-draw-tree imenu-buffer)))))) + nil) + +(add-hook 'ide-skel-side-view-window-functions 'ide-skel-imenu-side-view-window-function) + +;;; Info + +(require 'info) + +(defun ide-skel-info-get-buffer-create () + (let ((buffer (ide-skel-get-side-view-buffer-create " Ide Skel Info" + 'left "Info" "Info browser" + (lambda (editor-buffer) t)))) + (with-current-buffer buffer + (setq ide-skel-tabbar-menu-function + (lambda () + (append + (list + (list 'ide-skel-info-refresh "Refresh" t)))) + ide-skel-info-open-paths (make-hash-table :test 'equal) + ide-skel-info-root-node (cons "Top" "(dir)top")) + (add-hook 'tree-widget-after-toggle-functions (lambda (widget) + (let ((path (widget-get widget :path))) + (when path + (if (widget-get widget :open) + (puthash path t ide-skel-info-open-paths) + (remhash path ide-skel-info-open-paths))))) + nil t)) + buffer)) + +(defun ide-skel-info-file-open (widget &rest rest) + (let ((path (widget-get widget :path))) + (if (not (string-match "^(\\([^)]+\\))\\([^.]+\\)$" path)) + (error "Invalid node %s" path) + (let ((filename (match-string 1 path)) + (nodename (match-string 2 path)) + (buffer (get-buffer "*info*")) + buffer-win) + (unless buffer + (with-selected-window (ide-skel-get-last-selected-window) + (info) + (setq buffer (window-buffer (selected-window))) + (setq buffer-win (selected-window)))) + (unless buffer-win + (setq buffer-win (get-buffer-window buffer)) + (unless buffer-win + (with-selected-window (ide-skel-get-last-selected-window) + (switch-to-buffer buffer) + (setq buffer-win (selected-window))))) + (select-window buffer-win) + (Info-find-node filename nodename))))) + +(defun ide-skel-info-tree-expand-dir (tree) + (let ((path (widget-get tree :path))) + (condition-case err + (mapcar 'ide-skel-info-tree-widget (Info-speedbar-fetch-file-nodes path)) + (error + (message "%s" (error-message-string err)) + nil)))) + +(defun ide-skel-info-tree-widget (e) + (let ((name (car e)) + (path (cdr e))) + (if (condition-case err + (Info-speedbar-fetch-file-nodes path) + (error nil)) + (list 'ide-skel-info-tree-dir-widget + :path path + :help-echo name + :open (gethash path ide-skel-info-open-paths) + :node (list 'push-button + :tag name + :format "%[%t%]\n" + :notify 'ide-skel-info-file-open + :path path + :button-face 'variable-pitch + :help-echo name + :keymap tree-widget-button-keymap + )) + (list 'ide-skel-info-tree-file-widget + :path path + :help-echo name + :keymap tree-widget-button-keymap + :tag name)))) + +(defun ide-skel-info-refresh (&optional show-top) + (interactive) + (with-current-buffer ide-skel-info-buffer + (let ((inhibit-read-only t) + (start-line (save-excursion + (goto-char (window-start ide-skel-current-left-view-window)) + (line-number-at-pos)))) + (erase-buffer) + (tree-widget-set-theme "small-folder") + (let ((tree (ide-skel-info-tree-widget ide-skel-info-root-node))) + (plist-put (cdr tree) :open t) + (widget-create tree)) + (set-keymap-parent (current-local-map) tree-widget-button-keymap) + (widget-setup) + (if show-top + (goto-char (point-min)) + (goto-line start-line)) + (beginning-of-line) + (set-window-start ide-skel-current-right-view-window (point))))) + +(defun ide-skel-info (root-node) + (with-current-buffer ide-skel-info-buffer + (clrhash ide-skel-info-open-paths) + (setq ide-skel-info-root-node root-node) + (ide-skel-info-refresh t))) + +(defun ide-skel-info-side-view-window-function (side event &rest list) + (when (and (eq side 'left) ide-skel-current-left-view-window) + (cond ((eq event 'show) + (unless ide-skel-info-buffer + (setq ide-skel-info-buffer (ide-skel-info-get-buffer-create))) + (with-current-buffer ide-skel-info-buffer + (setq ide-skel-tabbar-enabled t))) + ((and (eq event 'tab-change) + (eq (cadr list) ide-skel-info-buffer) + (= (buffer-size ide-skel-info-buffer) 0)) + (ide-skel-info-refresh)))) + nil) + +(add-hook 'ide-skel-side-view-window-functions 'ide-skel-info-side-view-window-function) + +;;; Dir tree + +(defun ide-skel-dir-node-notify (widget &rest rest) + (let ((path (widget-get widget :path))) + (ide-skel-dir path))) + +(defun ide-skel-file-open (widget &rest rest) + (let ((path (widget-get widget :path))) + (ide-skel-select-buffer path))) + +(defun ide-skel-dir-tree-widget (e) + "Return a widget to display file or directory E." + (if (file-directory-p e) + `(ide-skel-dir-tree-dir-widget + :path ,e + :help-echo ,e + :open ,(gethash e ide-skel-dir-open-paths) + :node (push-button + :tag ,(file-name-as-directory + (file-name-nondirectory e)) + :format "%[%t%]\n" + :notify ide-skel-dir-node-notify + :path ,e + :button-face (variable-pitch bold) + :help-echo ,e + :keymap ,tree-widget-button-keymap ; Emacs + )) + `(ide-skel-dir-tree-file-widget + :path ,e + :help-echo ,e + :tag ,(file-name-nondirectory e)))) + +(defun ide-skel-dir-get-buffer-create () + (let ((buffer (ide-skel-get-side-view-buffer-create " Ide Skel Dirs" + 'left "Dirs" "Filesystem browser" + (lambda (editor-buffer) t)))) + (with-current-buffer buffer + (setq ide-skel-tabbar-menu-function + (lambda () + (append + (list + (list 'ide-skel-dir-refresh "Refresh" t) + (when (and (buffer-file-name ide-skel-current-editor-buffer) + (fboundp 'ide-skel-proj-get-project-create) + (funcall 'ide-skel-project-p (car (funcall 'ide-skel-proj-get-project-create (buffer-file-name ide-skel-current-editor-buffer))))) + (list 'ide-skel-dir-project "Show project tree" t)) + (list 'ide-skel-dir-home "Home" t) + (list 'ide-skel-dir-filesystem-root "/" t) + ))) + ide-skel-dir-open-paths (make-hash-table :test 'equal) + ide-skel-dir-root-dir (file-truename (substitute-in-file-name "~"))) + (add-hook 'tree-widget-after-toggle-functions (lambda (widget) + (let ((path (widget-get widget :path))) + (when path + (if (widget-get widget :open) + (puthash path t ide-skel-dir-open-paths) + (remhash path ide-skel-dir-open-paths))))) + nil t)) + buffer)) + +(defun ide-skel-dir-tree-list (dir) + "Return the content of the directory DIR. +Return the list of components found, with sub-directories at the +beginning of the list." + (let (files dirs) + (dolist (entry (directory-files dir 'full)) + (unless (string-equal (substring entry -1) ".") + (if (file-directory-p entry) + (push entry dirs) + (push entry files)))) + (nreverse (nconc files dirs)))) + +(defun ide-skel-dir-tree-expand-dir (tree) + "Expand the tree widget TREE. +Return a list of child widgets." + (let ((dir (directory-file-name (widget-get tree :path)))) + (if (file-accessible-directory-p dir) + (progn + (message "Reading directory %s..." dir) + (condition-case err + (prog1 + (mapcar 'ide-skel-dir-tree-widget (ide-skel-dir-tree-list dir)) + (message "Reading directory %s...done" dir)) + (error + (message "%s" (error-message-string err)) + nil))) + (error "This directory is inaccessible")))) + +(defun ide-skel-select-dir-handler (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (let* ((path (get-text-property (posn-point (event-start event)) 'path))) + (ide-skel-dir path)))) + +(defun ide-skel-dir-refresh (&optional show-top) + (interactive) + (with-current-buffer ide-skel-dir-buffer + (let ((inhibit-read-only t) + (start-line (save-excursion + (goto-char (window-start ide-skel-current-left-view-window)) + (line-number-at-pos)))) + (erase-buffer) + (let ((path-dirs (split-string (directory-file-name ide-skel-dir-root-dir) "[/\\]")) + (km (make-sparse-keymap)) + path) + (setq path-dirs (reverse (cdr (reverse path-dirs)))) + (define-key km [mouse-1] 'ide-skel-select-dir-handler) + (while path-dirs + (let ((dir (car path-dirs))) + (when (and (> (current-column) 0) + (>= (+ (current-column) (length dir) 1) (window-width ide-skel-current-left-view-window))) + (insert "\n")) + (setq path (directory-file-name (concat path (format "/%s" dir)))) + (unless (equal (char-before) ?/) + (insert "/")) + (insert (propertize dir + 'face 'bold + 'local-map km + 'mouse-face 'highlight + 'path path))) + (setq path-dirs (cdr path-dirs)))) + (insert "\n\n") + (tree-widget-set-theme "small-folder") + (let ((default-directory ide-skel-dir-root-dir) + (tree (ide-skel-dir-tree-widget (directory-file-name ide-skel-dir-root-dir)))) + (plist-put (cdr tree) :open t) + (widget-create tree)) + (set-keymap-parent (current-local-map) tree-widget-button-keymap) + (widget-setup) + (if show-top + (goto-char (point-min)) + (goto-line start-line)) + (beginning-of-line) + (set-window-start ide-skel-current-right-view-window (point)) + ))) + +(defun ide-skel-dir (root-dir) + (with-current-buffer ide-skel-dir-buffer + (clrhash ide-skel-dir-open-paths) + (setq ide-skel-dir-root-dir (file-truename (substitute-in-file-name root-dir))) + (ide-skel-dir-refresh t))) + +(defun ide-skel-dir-project () + (interactive) + (let ((root-dir (funcall 'ide-skel-project-root-path + (car (funcall 'ide-skel-proj-get-project-create (buffer-file-name ide-skel-current-editor-buffer)))))) + (message "Root dir: %S" root-dir) + (ide-skel-dir root-dir))) + +(defun ide-skel-dir-home () + (interactive) + (ide-skel-dir "~")) + +(defun ide-skel-dir-filesystem-root () + (interactive) + (ide-skel-dir "/")) + +(defun ide-skel-dirs-side-view-window-function (side event &rest list) + (when (and (eq side 'left) ide-skel-current-left-view-window) + (cond ((eq event 'show) + (unless ide-skel-dir-buffer + (setq ide-skel-dir-buffer (ide-skel-dir-get-buffer-create))) + (with-current-buffer ide-skel-dir-buffer + (setq ide-skel-tabbar-enabled t))) + ((and (eq event 'tab-change) + (eq (cadr list) ide-skel-dir-buffer) + (= (buffer-size ide-skel-dir-buffer) 0)) + (ide-skel-dir-refresh)))) + nil) + +(add-hook 'ide-skel-side-view-window-functions 'ide-skel-dirs-side-view-window-function) + +(easy-menu-add-item nil nil ide-skel-project-menu t) + +(defun ide-skel-proj-insert-with-face (string face) + (let ((point (point))) + (insert string) + (let ((overlay (make-overlay point (point)))) + (overlay-put overlay 'face face)))) + +(defun ide-skel-mode-name-stringify (mode-name) + (let ((name (format "%s" mode-name))) + (replace-regexp-in-string "-" " " + (capitalize + (if (string-match "^\\(.*\\)-mode" name) + (match-string 1 name) + name))))) + +(defun ide-skel-proj-get-all-dirs (root-dir) + (condition-case err + (split-string (shell-command-to-string (format "find %s -type d | grep -v '/CVS\\|/\\.svn'" root-dir)) + "\n" t) + (error nil))) + +(defun ide-skel-shell () + (interactive) + (when (fboundp 'ide-skel-show-bottom-view-window) + (funcall 'ide-skel-show-bottom-view-window) + (select-window (or (funcall 'ide-skel-get-bottom-view-window) + (selected-window))) + (ansi-term (or (getenv "ESHELL") (getenv "SHELL"))))) + +(defun ide-skel-project-menu (menu) + (let* ((curbuf-file (buffer-file-name (current-buffer))) + (curbuf-mode-name (when (and (buffer-file-name (current-buffer)) + (ide-skel-mode-file-regexp-list (list major-mode))) + (ide-skel-mode-name-stringify major-mode)))) + (condition-case err + (append + (when curbuf-mode-name + (list (vector (format "Search for %s file..." curbuf-mode-name) 'ide-skel-proj-find-files-by-regexp curbuf-mode-name))) + (list (vector "Search for file..." 'ide-skel-proj-find-text-files-by-regexp curbuf-mode-name)) + (when curbuf-mode-name + (list (vector (format "Grep %s files..." curbuf-mode-name) 'ide-skel-proj-grep-files-by-regexp curbuf-mode-name))) + (list (vector "Grep files..." 'ide-skel-proj-grep-text-files-by-regexp curbuf-file)) + (list (vector "Shell" 'ide-skel-shell t))) + (error (message (error-message-string err)))))) + +;; (ide-skel-project . relative-path) jesli path nalezy do projektu, +;; (qdir . filename) wpp + +(defun ide-skel-proj-get-project-create (path) + (let ((path (file-truename (substitute-in-file-name path))) + dir) + (if (file-directory-p path) + (progn + (setq path (file-name-as-directory path)) + (setq dir path)) + (setq dir (file-name-as-directory (file-name-directory path)))) + ;; path - true, qualified file name (no environment variables, ~, links) + (let ((project (some (lambda (project) + (let ((root-dir (ide-skel-project-root-path project))) + (when (string-match (concat "^" (regexp-quote root-dir)) path) + project))) + ide-skel-projects))) + (when project + (setq dir (ide-skel-project-root-path project))) + ;; there is no such project + (unless project + (let ((last-project-dir dir) + (dir-list (split-string dir "/")) + is-project) + ;; there is no root dir + (while (directory-files dir t (concat "^" ide-skel-cvs-dir-regexp) t) + (setq is-project t + last-project-dir (file-name-as-directory dir) + dir (file-name-as-directory (file-name-directory (directory-file-name dir))))) + (when is-project + (let ((list (nthcdr (1- (length (split-string last-project-dir "/"))) dir-list))) + (cond ((equal (car list) "trunk") + (setq last-project-dir (concat last-project-dir "trunk/"))) + ((member (car list) '("branches" "tags")) + (setq last-project-dir (concat last-project-dir (car list) "/" (when (cdr list) (concat (cadr list) "/"))))) + (t))) + (setq project (make-ide-skel-project :root-path last-project-dir + :include-file-path (ide-skel-proj-get-all-dirs last-project-dir)) + dir last-project-dir) + (push project ide-skel-projects)))) + (list (or project dir) (file-relative-name path dir) path)))) + +(defun ide-skel-proj-get-root (proj-or-dir) + (when proj-or-dir + (directory-file-name (file-truename (substitute-in-file-name + (if (ide-skel-project-p proj-or-dir) + (ide-skel-project-root-path proj-or-dir) + proj-or-dir)))))) + +(defun ide-skel-proj-find-files (dir file-predicate &optional dir-predicate) + "Return list of all qualified file paths in tree dir with root +DIR, for which FILE-PREDICATE returns non-nil. We will go into +directory only if DIR-PREDICATE returns non-nil or DIR-PREDICATE *is* nil." + (setq dir (file-name-as-directory (file-truename (substitute-in-file-name dir)))) + (let (result-list) + (mapcar (lambda (path) + (if (file-directory-p path) + (when (and (file-accessible-directory-p path) + (or (null dir-predicate) + (funcall dir-predicate path))) + (setq result-list (append result-list (ide-skel-proj-find-files path file-predicate dir-predicate)))) + (when (or (null file-predicate) + (funcall file-predicate path)) + (push path result-list)))) + (delete (concat (file-name-as-directory dir) ".") + (delete (concat (file-name-as-directory dir) "..") + (directory-files dir t nil t)))) + result-list)) + +(defun ide-skel-root-dir-for-path (path) + (let (root-dir) + (setq root-dir (car (ide-skel-proj-get-project-create path))) + (unless (stringp root-dir) + (setq root-dir (ide-skel-project-root-path root-dir))) + root-dir)) + +(defun ide-skel-has-imenu (&optional buffer) + (with-current-buffer (or buffer (current-buffer)) + (or (and imenu-prev-index-position-function + imenu-extract-index-name-function) + imenu-generic-expression + (not (eq imenu-create-index-function + 'imenu-default-create-index-function))))) + +(defun ide-skel-mode-file-regexp-list (mode-symbol-list) + (delq nil (mapcar (lambda (element) + (let ((fun-name (if (listp (cdr element)) (cadr element) (cdr element)))) + (when (memq fun-name mode-symbol-list) (cons (car element) fun-name)))) + auto-mode-alist))) + +(defun ide-skel-find-project-files (root-dir mode-symbol-list predicate) + (let ((obj-file-regexp-list (delq nil (mapcar (lambda (element) + (let ((len (length element))) + (unless (and (> len 0) + (equal (elt element (1- len)) ?/)) + (concat (regexp-quote element) "$")))) + (append ide-skel-proj-ignored-extensions completion-ignored-extensions)))) + (mode-file-regexp-list (ide-skel-mode-file-regexp-list mode-symbol-list))) ; (file-path-regexp . major-mode-function-symbol) + (when (and mode-symbol-list + (not mode-file-regexp-list)) + (error (format "No rules for %s major modes in auto-mode-alist." (mapconcat 'identity mode-symbol-list ", ")))) + (ide-skel-proj-find-files root-dir + (lambda (file-name) + (and (not (string-match "#" file-name)) + (not (string-match "semantic.cache" file-name)) + (or (and (not mode-symbol-list) + (not (some (lambda (regexp) + (string-match regexp file-name)) + obj-file-regexp-list))) + (and mode-symbol-list + (some (lambda (element) + (let ((freg (if (string-match "[$]" (car element)) + (car element) + (concat (car element) "$")))) + (when (string-match freg file-name) + (cdr element)))) + mode-file-regexp-list))) + (or (not predicate) + (funcall predicate file-name)))) + (lambda (dir-path) + (not (string-match (concat "/" ide-skel-cvs-dir-regexp) dir-path)))))) + +(defun ide-skel-proj-find-text-files-by-regexp () + (interactive) + (unwind-protect + (progn + (setq ide-skel-all-text-files-flag t) + (call-interactively 'ide-skel-proj-find-files-by-regexp)) + (setq ide-skel-all-text-files-flag nil))) + +(defun ide-skel-proj-grep-text-files-by-regexp () + (interactive) + (unwind-protect + (progn + (setq ide-skel-all-text-files-flag t) + (call-interactively 'ide-skel-proj-grep-files-by-regexp)) + (setq ide-skel-all-text-files-flag nil))) + +(defun ide-skel-proj-grep-files-by-regexp (root-dir mode-symbol-list regexp) + (interactive (let* ((path (buffer-file-name (current-buffer))) + (all-text-files (or ide-skel-all-text-files-flag + (consp current-prefix-arg))) + (whatever (progn + (when (and (not all-text-files) + (not (ide-skel-mode-file-regexp-list (list major-mode)))) + (error (format "No rules for %s major mode in auto-mode-alist" (symbol-name major-mode)))) + (unless path + (error "Current buffer (%s) is not visiting any project file" (buffer-name (current-buffer)))))) + (root-dir (when path (ide-skel-root-dir-for-path path))) + (thing (let ((res (thing-at-point 'symbol))) + (set-text-properties 0 (length res) nil res) + res)) + (chunk (let ((result (read-string (concat (if root-dir (format "Root dir is %s. " root-dir) "") + (format "Search in %s files. Regexp%s: " + (if all-text-files + "all text" + (ide-skel-mode-name-stringify major-mode)) + (if thing (format " (default %s)" thing) ""))) + nil ide-skel-proj-grep-project-files-history thing))) + (if (and result (> (length result) 0)) + result + (error "Regexp cannot be null"))))) + (list root-dir (unless all-text-files (list major-mode)) chunk))) + (let* ((paths (ide-skel-find-project-files root-dir mode-symbol-list (lambda (path) t))) + (temp-file-path (concat (file-name-as-directory temporary-file-directory) (make-temp-name "ide-")))) + (unless paths + (error "No files to grep")) + ;; create temporary file with file paths to search + (with-temp-file temp-file-path + (dolist (path paths) + ;; save buffer if is open + (let ((buffer (get-file-buffer path))) + (when (and buffer + (buffer-live-p buffer)) + (with-current-buffer buffer + (save-buffer)))) + (setq path (concat "./" (file-relative-name path (file-name-as-directory root-dir)))) + (insert (concat "'" path "'\n")))) + (let* ((default-directory root-dir) + (grep-command (format "cat %s | xargs grep -n %s" temp-file-path regexp))) + (setq ide-skel-proj-grep-header (list root-dir + (if mode-symbol-list + (mapconcat (lambda (sym) (ide-skel-mode-name-stringify sym)) mode-symbol-list ", ") + "all text") + regexp)) + (grep grep-command)) + ;; delete file after some time, because grep is executed as external process + (run-with-idle-timer 5 nil (lambda (file-path) + (condition-case nil + nil ; (delete-file file-path) + (error nil))) + temp-file-path))) + +(defun ide-skel-proj-find-files-by-regexp (root-dir mode-symbol-list name-regexp &optional case-sensitive) + "Search directory tree with root in ROOT-DIR and returns +qualified paths to files which after open in Emacs would have one +of modes in MODE-SYMBOL-LIST (if list is empty, we will take all +text files) and their name (without dir) matches NAME-REGEXP." + (interactive (let* ((path (buffer-file-name (current-buffer))) + (all-text-files (or ide-skel-all-text-files-flag + (consp current-prefix-arg))) + (whatever (progn + (when (and (not all-text-files) + (not (ide-skel-mode-file-regexp-list (list major-mode)))) + (error (format "No rules for %s major mode in auto-mode-alist" (symbol-name major-mode)))) + (unless path + (error "Current buffer (%s) is not visiting any project file" (buffer-name (current-buffer)))))) + (root-dir (when path (ide-skel-root-dir-for-path path))) + (chunk (read-string (concat (if root-dir (format "Root dir is %s. " root-dir) "") + (if all-text-files + "F" + (concat (ide-skel-mode-name-stringify major-mode) " f")) + (format "ile name regexp: " )) + nil ide-skel-proj-find-project-files-history nil))) + (list root-dir (unless all-text-files (list major-mode)) chunk))) + (let* ((paths (ide-skel-find-project-files root-dir mode-symbol-list + (lambda (path) + (let ((case-fold-search (not case-sensitive))) + (or (not name-regexp) + (string-match name-regexp (file-name-nondirectory path))))))) + (buffer (get-buffer-create ide-skel-proj-find-results-buffer-name)) + (saved-window (cons (selected-window) (window-buffer (selected-window))))) + (if (= (length paths) 1) + (find-file (car paths)) + (save-selected-window + (save-excursion + (set-buffer buffer) + (setq buffer-read-only nil + default-directory root-dir) + (erase-buffer) + + (insert "Root dir: ") + (ide-skel-proj-insert-with-face root-dir 'font-lock-keyword-face) + (insert "; Range: ") + (ide-skel-proj-insert-with-face + (if mode-symbol-list + (mapconcat (lambda (sym) (ide-skel-mode-name-stringify sym)) mode-symbol-list ", ") + "all text") + 'font-lock-keyword-face) + (insert " files; Regexp: ") + (ide-skel-proj-insert-with-face name-regexp 'font-lock-keyword-face) + (insert "; Case sensitive: ") + (ide-skel-proj-insert-with-face (if case-sensitive "Yes" "No") 'font-lock-keyword-face) + (insert "\n\n") + (compilation-minor-mode 1) + (let ((invisible-suffix ":1:1 s")) + (put-text-property 0 (length invisible-suffix) 'invisible t invisible-suffix) + (dolist (path paths) + (let ((relative-path (file-relative-name path root-dir))) + (put-text-property 0 (length relative-path) 'mouse-face 'highlight relative-path) + (insert relative-path) + (insert invisible-suffix) + (insert "\n")))) + (insert (format "\n%d files found." (length paths))) + (goto-char (point-min)) + (setq buffer-read-only t) + (when (and paths (fboundp 'compile-reinitialize-errors) (funcall (symbol-function 'compile-reinitialize-errors) t))) + (switch-to-buffer-other-window buffer) + (goto-line 1) + (goto-line 3))) + (if (window-live-p (car saved-window)) + (select-window (car saved-window)) + (when (get-buffer-window (cdr saved-window)) + (select-window (get-buffer-window (cdr saved-window)))))))) + +(unless ide-skel-proj-grep-mode-map + (setq ide-skel-proj-grep-mode-map (make-sparse-keymap)) + (define-key ide-skel-proj-grep-mode-map "r" 'ide-skel-proj-grep-replace)) + +(defun ide-skel-proj-grep-replace () + (interactive) + (let ((replace-to (read-string "Replace to: " nil 'ide-skel-proj-grep-replace-history)) + (current-pos 1) + begin end + buffers-to-revert + replace-info) + (save-excursion + (while current-pos + (setq current-pos (next-single-property-change current-pos 'font-lock-face (current-buffer))) + (when (and current-pos + (eq (get-text-property current-pos 'font-lock-face) 'match)) + (setq begin current-pos) + (setq current-pos (next-single-property-change current-pos 'font-lock-face (current-buffer))) + (setq end current-pos) + (save-excursion + (goto-char begin) + (beginning-of-line) + (let ((begline (point))) + (re-search-forward "^\\(.*\\):\\([0-9]+\\):" nil t) + (let ((len (length (match-string 0))) + (file-path (expand-file-name (substring-no-properties (match-string 1)) default-directory))) + (when (get-file-buffer file-path) + (push (get-file-buffer file-path) buffers-to-revert)) + (push (list file-path + (string-to-number (match-string 2)) + (- begin begline len) + (- end begline len)) + replace-info))))))) + (dolist (replacement replace-info) + (let ((file-path (nth 0 replacement)) + (line-no (nth 1 replacement)) + (from-column-no (nth 2 replacement)) + (to-column-no (nth 3 replacement))) + (condition-case err + (with-temp-file file-path + (insert-file-contents file-path) + (goto-line line-no) + (forward-char from-column-no) + (delete-region (point) (+ (point) (- to-column-no from-column-no))) + (insert replace-to)) + (error (message "%s" (error-message-string err)))))) + (dolist (buffer buffers-to-revert) + (when (buffer-live-p buffer) + (with-current-buffer buffer + (revert-buffer t t t)))) ; ignore-auto, nonconfirm, preserve-modes + (message "Done."))) + +(define-minor-mode ide-skel-proj-grep-mode + "" + nil ; init value + nil ; mode indicator + ide-skel-proj-grep-mode-map ; keymap + ;; body + (unless (assq 'ide-skel-proj-grep-mode minor-mode-map-alist) + (push (cons 'ide-skel-proj-grep-mode ide-skel-proj-grep-mode-map) minor-mode-map-alist))) + +(add-hook 'grep-setup-hook (lambda () + (when ide-skel-proj-grep-header + (ide-skel-proj-grep-mode 1) + (unwind-protect + (progn + (setq buffer-read-only nil) + (erase-buffer) + (remove-overlays) + (insert "Root dir: ") + (ide-skel-proj-insert-with-face (car ide-skel-proj-grep-header) 'font-lock-keyword-face) + (insert "; Range: ") + (ide-skel-proj-insert-with-face (cadr ide-skel-proj-grep-header) 'font-lock-keyword-face) + (insert " files; Regexp: ") + (ide-skel-proj-insert-with-face (caddr ide-skel-proj-grep-header) 'font-lock-keyword-face) + (insert "\n") + (insert "mouse-1 toggle match; r replace matches") + (insert "\n\n")) + (setq buffer-read-only t + ide-skel-proj-grep-header nil) + (setq ide-skel-proj-old-compilation-exit-message-function (symbol-value 'compilation-exit-message-function)) + (set 'compilation-exit-message-function + (lambda (status code msg) + (let ((result (if ide-skel-proj-old-compilation-exit-message-function + (funcall ide-skel-proj-old-compilation-exit-message-function + status code msg) + (cons msg code)))) + (save-excursion + (goto-char (point-min)) + (let (begin + end + (km (make-sparse-keymap)) + (inhibit-read-only t)) + (define-key km [down-mouse-1] 'ignore) + (define-key km [mouse-1] 'ide-skel-proj-grep-click) + (while (setq begin (next-single-property-change (point) 'font-lock-face (current-buffer) nil)) + (setq end (next-single-property-change begin 'font-lock-face (current-buffer) nil)) + (put-text-property begin end 'pointer 'hand) + (put-text-property begin end 'local-map km) + (goto-char end)))) + result))))))) + +(defun ide-skel-proj-grep-click (event) + (interactive "@e") + (with-selected-window (posn-window (event-start event)) + (let* ((posn-point (posn-point (event-start event))) + (begin (or (and (not (get-text-property (1- posn-point) 'font-lock-face)) + posn-point) + (previous-single-property-change posn-point 'font-lock-face (current-buffer) nil))) + (end (next-single-property-change posn-point 'font-lock-face (current-buffer) nil)) + (font-lock-face (get-text-property posn-point 'font-lock-face)) + (inhibit-read-only t)) + (put-text-property begin end 'font-lock-face (if (eq font-lock-face 'match) 'widget-field 'match))))) + +(defun ide-skel-proj-change-buffer-hook-function () + (let ((path (buffer-file-name))) + (when path + (condition-case err + (let ((project-list (ide-skel-proj-get-project-create path))) + (when (ide-skel-project-p (car project-list)) + (setq PC-include-file-path (ide-skel-project-include-file-path (car project-list))))) + (error nil))))) + +(add-hook 'ide-skel-editor-buffer-changed-hook 'ide-skel-proj-change-buffer-hook-function) + +(tabbar-mode 1) + +(provide 'ide-skel) + diff --git a/.emacs.d/tabbar.el b/.emacs.d/tabbar.el new file mode 100644 index 0000000..09db712 --- /dev/null +++ b/.emacs.d/tabbar.el @@ -0,0 +1,1932 @@ +;;; Tabbar.el --- Display a tab bar in the header line + +;; Copyright (C) 2003, 2004, 2005 David Ponce + +;; Author: David Ponce +;; Maintainer: David Ponce +;; Created: 25 February 2003 +;; Keywords: convenience +;; Revision: $Id: tabbar.el,v 1.69 2006/06/08 08:27:39 ponced Exp $ + +(defconst tabbar-version "2.0") + +;; This file is not part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2, or (at +;; your option) any later version. + +;; 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 GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. + +;;; Commentary: +;; +;; This library provides the Tabbar global minor mode to display a tab +;; bar in the header line of Emacs 21 and later versions. You can use +;; the mouse to click on a tab and select it. Also, three buttons are +;; displayed on the left side of the tab bar in this order: the +;; "home", "scroll left", and "scroll right" buttons. The "home" +;; button is a general purpose button used to change something on the +;; tab bar. The scroll left and scroll right buttons are used to +;; scroll tabs horizontally. Tabs can be divided up into groups to +;; maintain several sets of tabs at the same time (see also the +;; chapter "Core" below for more details on tab grouping). Only one +;; group is displayed on the tab bar, and the "home" button, for +;; example, can be used to navigate through the different groups, to +;; show different tab bars. +;; +;; In a graphic environment, using the mouse is probably the preferred +;; way to work with the tab bar. However, you can also use the tab +;; bar when Emacs is running on a terminal, so it is possible to use +;; commands to press special buttons, or to navigate cyclically +;; through tabs. +;; +;; These commands, and default keyboard shortcuts, are provided: +;; +;; `tabbar-mode' +;; Toggle the Tabbar global minor mode. When enabled a tab bar is +;; displayed in the header line. +;; +;; `tabbar-local-mode' (C-c ) +;; Toggle the Tabbar-Local minor mode. Provided the global minor +;; mode is turned on, the tab bar becomes local in the current +;; buffer when the local minor mode is enabled. This permits to +;; see the tab bar in a buffer where the header line is already +;; used by another mode (like `Info-mode' for example). +;; +;; `tabbar-mwheel-mode' +;; Toggle the Tabbar-Mwheel global minor mode. When enabled you +;; can use the mouse wheel to navigate through tabs of groups. +;; +;; `tabbar-press-home' (C-c ) +;; `tabbar-press-scroll-left' (C-c ) +;; `tabbar-press-scroll-right' (C-c ) +;; Simulate a mouse-1 click on respectively the "home", "scroll +;; left", and "scroll right" buttons. A numeric prefix argument +;; value of 2, or 3, respectively simulates a mouse-2, or mouse-3 +;; click. +;; +;; `tabbar-backward' (C-c ) +;; `tabbar-forward' (C-c ) +;; Are the basic commands to navigate cyclically through tabs or +;; groups of tabs. The cycle is controlled by the +;; `tabbar-cycle-scope' option. The default is to navigate +;; through all tabs across all existing groups of tabs. You can +;; change the default behavior to navigate only through the tabs +;; visible on the tab bar, or through groups of tabs only. Or use +;; the more specialized commands below. +;; +;; `tabbar-backward-tab' +;; `tabbar-forward-tab' +;; Navigate through the tabs visible on the tab bar. +;; +;; `tabbar-backward-group' (C-c ) +;; `tabbar-forward-group' (C-c ) +;; Navigate through existing groups of tabs. +;; +;; +;; Core +;; ---- +;; +;; The content of the tab bar is represented by an internal data +;; structure: a tab set. A tab set is a collection (group) of tabs, +;; identified by an unique name. In a tab set, at any time, one and +;; only one tab is designated as selected within the tab set. +;; +;; A tab is a simple data structure giving the value of the tab, and a +;; reference to its tab set container. A tab value can be any Lisp +;; object. Each tab object is guaranteed to be unique. +;; +;; A tab set is displayed on the tab bar through a "view" defined by +;; the index of the leftmost tab shown. Thus, it is possible to +;; scroll the tab bar horizontally by changing the start index of the +;; tab set view. +;; +;; The visual representation of a tab bar is a list of valid +;; `header-line-format' template elements, one for each special +;; button, and for each tab found into a tab set "view". When the +;; visual representation of a tab is required, the function specified +;; in the variable `tabbar-tab-label-function' is called to obtain it. +;; The visual representation of a special button is obtained by +;; calling the function specified in `tabbar-button-label-function', +;; which is passed a button name among `home', `scroll-left', or +;; `scroll-right'. There are also options and faces to customize the +;; appearance of buttons and tabs (see the code for more details). +;; +;; When the mouse is over a tab, the function specified in +;; `tabbar-help-on-tab-function' is called, which is passed the tab +;; and should return a help string to display. When a tab is +;; selected, the function specified in `tabbar-select-tab-function' is +;; called, which is passed the tab and the event received. +;; +;; Similarly, to control the behavior of the special buttons, the +;; following variables are available, for respectively the `home', +;; `scroll-left' and `scroll-right' value of `

cUY$91ZrtUJ>oT$_z*hy+U+|Z2s?MsP84{c- zR9`9=4cWi?*edJellE-e?^Vq?f^=_Hr>wZR7>BU^zsymh2a-#|&~~49iY)aHw%a4g z{wj#L^@(@l`1j>y-LF=?WplNEIvt3aYCY?jE&*%i-H=|l8rf4t)d+m-!;?3!`!I)r zz?PT?On@YGyR)(~*Ak6po0|h^H#3L3G}u}8>Al~3m|oo6%E~1rv$F;UNza%+!n9$i zw3U?+y`#kp-^W=#jgQaLp~R|2KMv>;SH8{ms9d@?5qK$MRH176+*zPK^I=49q!|W_ zUw<^9#%yo{HxwW-)B1OJ(3gWF0B)#3YVT84KKB7if|0bQ#yJEn@cQm3Grn6SVgOff z%ffYn5T$pE(TZTw0gFjYLb7xii=2H0or1_(HGLwSw4xBuneP%s9&8Q|8*j%u!AUl| z=p(D>=66y{=e;pi=DKT);X|b>kt(MiDaUer|qFiTh~o8sY4!auX(IR)wyqV zgovKbgzt^Jf%r0h@Y@TJ%Q;o^36F1g80xWmH%x9!Gd&0tVUGDIZ#51FnnbtNjI?ni zlFn{1BSd(236bas=PAp*XCZsW!z;Pj*uI)9Fla`vU}=1>&?fNSuYUR1mr7pGtk!Zh zyVGfRc5C;>AKw-}GFRw=0u_1UFc9y$7)#r0 z!xE%|h;+U9^V_c?f-<+!aty4P7>3L=BUEq#h0$KZ3)8lb=d0)HYKRDQM;mV^3cEFU z%Y>)O#j=46xQ0ZI3CQ#m-xjT2Z}7pQf66!MZIobQ)kUB6PzXVve=k2fF!_$(?yhS4 zVA$`fw7k5O`*$BR;G}0^T~X~{5I{Lmz?Rdcp2veW+mi2NNeN5D`(o<-FN2kw0i98;6i{XMQ#G_em^6NOwx%TH6fT;-v2_hJ!hi*L7Y3A``9QI^JVMgFNN|+GA<)2_9eahFL<1@oyYq{pKg(GHs;(D}xY?ICIi>K$Z z?vxfb!-}L@AoQ$G$?6JKI%}lyXsL)`k-$le>u`ca&*+#x3P^HfOBMlP)4rQu!uIM$p}r=kJVHR~OW|4Ii64I4JSk9oiQKl*B(N=5OEM%gTdaHS$#NVb_mHUrG@xEs+Wh2BK{=81SL)Y1MxaDGif9jIuD`<0R!f zumqZmrIQ*lsuh}lwqVQFcnL`2fSql9j?5TYA2Cm)goK(JDAOiDtA3@TVr8YG!VLdK z5ISj%%h9P{DLp$IJbIbAXfruc5lYl0$-r_lM+$Qsyo6wu32W7Kd;2~p5Xpod#uu6O zdyTpccCN5r{pjnRL{}tSlh%MiqYFn55-`6!HyS7?&e3;HQj$KyZ~V!nHQ8`jC3TuZ zBr#NT1h?x{fa>yc5h^$*yQwbhyR8%o-bStT1*!~OR$5Bo15Z4KuV0~)7ux=Lb|iWX zEj-xYH)lbj)$tv3p6*pZo*smF+JC3QB8(yb>w0pz*??IdxKSQ(JFRjLkXc{wo5dI5 zQ|+Heqwd^Ayzx_NPFRsHQ+~)Z^)NcQzuzp*T~mb8Am6T5z~hcN?d^I_lh&P`P@Y<^ zR@lw$pQPAU*i@l{)C={e#A7_yYI2}LRAQ8i6^gDN#c2)>K07V@ayjXl@mzZ$$2-M{ z&Q54I#?7eddq0$k4y3&q$+`ctzX%WAc7o=3u4c?jEze(yNguY_m=divrqr!YjwTT9 z?2#OldK?v=Cp!bkCH1n=FnJg`4-t0k5@ve&H15;cURA@EL+#e_X=^y)LsQc`&Cu}9 zDJ!*jl2W@{GE}tDmjyaK=umrFAd?B|wHzM+8_xt53JqQR+o?Wr+1dB zs=U5IWe{@v3cx0gnJ62*#jprLoz6qTdIkmHW-Fn_dd-@qjSmWzoxSm+oxFiQ+zbJj z@k#oC^1|5#71aCt*k^` zkmLmNELac<>iI-Cyonrr!(^?oKiXx=t6r^S%H5x)ye+t_fD~9M-k8QLbZw|-I1T>1 z0GoexLjXDM%|1ni*q7>AnP4obJ1qgHP?7Cyw%VaS(9%v%)+|N})#S3$AEDntFavTe zZ4lvo^$e@09@L0&M6POSvhI(F0zHhRtfe+qK|u-JBtJaN-LHypfP4FUkMk*eU2(+j z4dU8OCRwYs-4(Z8>F07Co3lGRm)YMj{K2ilr#4L6_xb9D)M6FN)1B74f!lqHS)PjO z@|Qt-S@Jsk9W{SfQlUo1mWMp(uL}CZ8d~eQo13>=Z%dhZ*j*NbKn(lNcctX7g0Go> z?pYilx~8UedcBwpyT}hzpCd zy_3|Jv9VTtK*Y+1Wu`tKDFfiD15=~DL$^I28Fv3KHta4M@3HrpS#3W|O~sPXUdMR( z6hMD`&C2>h6Zu2G#{`YNIETaW#-nEt@-KqVcC=@yv+FQaHRQXi{Xd58&_EGo8A_LX zUq$guV^SR)OG_oGB`+4+c>f$nU!7=`1&q6J0l+nL7^XDFdjF;ez5NZ~3eQ_(Zqt|E zZ5)x3n3@u$mh3=y!+PUG^OKQB7ar|Gr=4!TJnrPSgQ=z(YD?e5CQI&L&` z8ZB~Ue7sv_9hlrSUFB#oUTtRtoNTL+{;`MtQ1O+OoSW52dFk%3sJOtf4v+3vpNo)x zq1zs`x&C~~tIcFkN^Otn8~naCHU=t5R2}rlG@VYC5R>bSX~(B~^zmGV*lob&5p;z0 zf>6Wy2O~7|hm1Ilv}~GB_VQFGH+#u!N`za7ErU;>g zIN4DzC3Bfk@U-0b+f;X2s^X8=Ma3Vy!9{TIo+tL3iHQE^}-9 zn3hlpo}RPX9E;<9yDs5LZ$CWYgiYJTwe&Bka&3ld<@mbZgBm#m(y5@rKSr=09bdQ zCTM6ryyn+bYO&ORvRekGznSpR?-7jf^nEdn%p+8E_sj@!2R6M*M$ z-QDA)!3UG#545%hkcYhiteyw6ic;~OhZiyL73-l8XRcks(9~-t1Pgd?>OzJsv?ktQ zvZ(&v8bh8bDV%I2CjEqmwpa8JMp4b!%6-bWH?gymLfwzbR;QPlZqamyjl#g7xi)pB zZf5srrH$JPnYQF|x2Lpf>{?0bt!&H(Tpod$yStv--FON@>-9`|?VoIxa*7Oth?U-J zmko0Is9T1l)q0{0s{Tk$0Wy5IT;-CoJ&291JITySK#JfC94*f$fPo?93B7_mt!1^% zSml@C!^zvMRm}jaC26cZ+X{uMbA7rFa z*#Gp{({zA$^@P(zwF~r5Yt}jv95(u zjc7h~ua@tG-u~u~tuExQ8k_U}B-91YHga+z!u{VLh>Be^dBsuTvL(2-JcM_H+#YOX zH*cQEZI^y&ay%bNW)li*r~Dy-eDRJ+$jERrvzV z^(=Z(l;Vqfzc;QxF$$uHPC*!h=_{UqX97V#6NIDNJL3ThK}L8>1yJp1OC&a^6UNN_ zP<@M2htakTF{2rFD(7~2V7>yzT+NT1bVHwkJZqZf{M9(Ry07+uPc+&#F9n zTst|htDF$+c5Fr?r&!RHs9p;iCyjkq(#alul|zycXszG0UHIjP_S-9*B=35jeZz#- zHn=bnk>4;t1#{g&A3BA_zWt8j22o&l1a#Kwosxl00W8XcuQEpQ4xRjRa$xJ5jmpyi z;UGTV|IUq$PaDvob((+*^7KF{_1Yydgh#UtIXNhEXD84cTdQ%~ZJLgGH-U_M*~__t~)UKpZFG3hc?&ojX8x0nG7RjYz! z)k6xYYf0MHJztfxSgO}2eWBaGTtvuR?_&Ily1=9tYVA%zzbk-yJv$w90*l_!+Jr}0 z#XD4B#r_nOyFP?0)z%GHl!G8w?rgjF?AWL`mEVqoczK|at@&f`G$Sjbboty9bhreD z>mN+W&2Z=(yr)T4^d4PJO>GY7;+u}Dt3H_9>Wmd4uG2QPJRRQy$HyDYZ@wPY%T9=|^g#q?rE<(Chsvs$8;D|r38%J#Pge_A(O-y7RoZw&p; zJpet(J{9CNX^3coe6PL1?D7zZBx^MwnD`KO#>_f0$vz3_b?9X4gSeXsyROT(m&ZMt z2?n&>Mr|-DoV$dD5HDXMz;aF>4`z8x%Hz|c5Rpt&UZ%j|pQ<&_nb6f$SePf@RjnS* z@rH;9kVr`5kdWMEIqnB%<)7N4+OrczrTlC`r&eWe9NnSHO3(my`bAF|BP+LiV9nm2 z>Q&e~pzz!;K;>53b|*hG9i z{!}wI{=3Si*R8^qu7QTY)0i@=&~2@p{L-=9IG<<6hgam<^oK`8&)iQAZ<2~7Y19?D zlbY<@qNGd8{|ziNzWx;Lt<6IUI9&@)|Xjq8GQ(D`U*v5ai*4U6;qE-vn|d6okV1i#~au47>$S z_m$*9!T~kEk&?ps0;a`SrGpv!Dw;p=>4Gk-R>OEO;j=NJ;mK? z#A&9KZ@1W8pN1a?S|SYdOf|J~DD86pbgi}zHDBB%477c!S^TDE>9_xdU4j<`RC0|u z4{E2lZ&E3v(NTS@wS&bAb!RZr)@j&U^T>UdJ16r2PI^X0dU`GkQ$X_+OfnV~Wij0e zH2||GS~M|+D?JazVGPH93G@t5h_BB2^Yoe12Yqkn&KKgqEA3|6pL|+ZR@BROw~I?# zbgLXEZLZzom5(q*f44CjN&4s>#E*SZWDaauTHX*sUB3ilDkhS+TD9yV3-5ZbV<()}$zTwZyRvL$#z(Q3CAU&5qNi-oEMRR>BbzAZ0 z?(knqq@y4~c z?X#78Zi2&OU0!fa{;h}?px&*t<#Xjg2{7C{I(=Vlo6BaFnhoV+>HI`#$c~IL7 z8NpHh)|-Lz{~z0x8A@^NJ{%f^Kuc8T%WfXO$70#JUGh}&v-!2MU6e>`Zgd_?-e;^3 znJPKDG9cIaHWCnUb30d+?Cd&MYbEBv#Tvc5xVW&e_*_{closZ^9ji!5V`E52Jz&}l z(s^J+>=;dkMCAtYNr0ROKWP2w#oaxLYsf_;mAE2IcxK9`>MW!~W5*P2@OP;|&tba{ zVggufRydx*FQwhkX~lIuK1ZFDR6%g%XkuW1n)D%qtU?#M5&H5a zSQZ8}osKu;#%oLUzB&K#);YK?d!IgU-SKB(zPY7!Fjmx2+uO3DFQacq@shD* zs7?UMZ@*@w$Kum($Zi8oOi3D57V%fw)D#UXT6`Mn>RRI?BSXYNsn28j2c)h%0Sm>- ziiJf^4%s|pQJ_;+Dm0*3KL$Gb;NbiCgaS^{P8p}?zOT>&JFic!3-#PnFqk363c-QF z!WAh@)zLuB#0`ez^Nca3^|Otm)*BDGP%k9 z7u7hs@C%^xUv4YQ(ZLqiN)I9pD9zOzcfK)wauMq2c=8b@e*nk6l!F$%zrXzt4VI{n z?WuC#q%Xp4Mbjy0l;cLjuMCh0_v)bRH_n;<@ng0P9%^?aij~s*)%u0=0m;Yy;r3-8 zth0&-JwrwxI+_f&Wp?ELJY=$_4(G&*k8k^u7Os$QzVn%-T?b9-LbM3Ud6#qOUc?1d zlSJPDFYmxF^PxfyH)hFQ=oPl<!at={U-J(&sL>h#J2F-3dg^Dhg*ZSwlln-UmauoF*Hg3A_ewtdty%71RK3xQX( z5A@()K3~}VNM?#?=dHtebyn=}izQd}fh;hoa(##eHEK)T7+;;0WAf(nE%-%#c4LVd zBW#Vh<9&SksD3^xecd@TbDIbpJkSpXq|K5oHxIzN4Fh4o+_}bCP;RNms1VcU_0`+w z0W5=wY$6#tiH6gvufb|FovmQ!JcENqhpU1&h%Ou!W4N5Jh$+q)NeQ|5FVnZdY#^W; zGH>kM{?D`i=Ogy*-{-kHGX~lXeWCZ99`^gW&<><+)t-WSsyzj--W~ej684ZmW8ACi}@3;8+;&pU>2z0go{x z=>6fIiCUW40>1%=hsTgP7YPguJzM*qpP(M@G2?7 z`o=+UZGMroyX;^7;Ek>IS3C@S9G4oqe*&8fo27={bd#UZnj>f6J?9#-G?QyORuW5B z2>*UcRr9VLk2s=RY41Qw#$R`o31}t~>|nQg`xpF5`&6RyNv-}USb~RY!5*T{42m*i zT2=C1e>{ zvtrFy>iWx`VewXzJAA9;@u@YDAnTow7Wb7IZMs|MI!b=tqnFd&sN0{=A!RTgD&EkU z77Z^qxVm800=NurbXm%O6#QLHoyDoqqq?YRxRo*#dO2F&gr2ih{`;gLTI`=BChUx7 zrp5@1U~j^d6z0bpCh8vX00Z)?j!w?cVvq|Ttl(EAms)B1>EmKOk0&j75Dn|W@*0uB zqoy4Z-qFB<`#e9QZOh*76Q4geIfp>~mzy$S28zpz{^FGoc#cMH5WO>iiD`Y}HQZ}g zyxv>@Bm`PvV7h@u^iHwgkeBLRSEAQSgnat*MIi_!fs6IIBezGr%yPWi1TXG?Q>3(w zquF%Ohi>C^*#02@%2{-;EKT{X`r@6rHg@DtpjKxmKfiFCA6gtSM~HmUXHm&qjz|c9I#OQdL8fO}VQW@| zXOdKMT}&9hpR+UJ=hsNyDk*3#ir>5G06#KZ6u6+=n7jhsPHJyW&DdDCF&f)fy#k;wa?9Z-&Hbayoj(@*@p=+i5%7`bYL+&^ zOj7dzqTmR-G#G0LnLf4ctGH`OuTvWSSNKn{P2M!C2syphc(vCS`0FPj#EkMLZH$06a(5^x>4z{fgJ#QcW*EK5T zj9>7j{c0(w0&(p<0vCt+| zH;}uDp%|4{&>`PtXkvdlY`vKdCZY>hZ%6AVSBc=U-?@5bU>}11(gkhg)hE$P8RtoV zQ$TM6xt!?%Ob+3vq@`6=WijDrreE`cOg1q2sLcXq0s!Klw#r`{`MK< zwn;zd$zo8I5Bkv7Y(vZapC|X9j||-Bs4Jq2ul4PXm-O}fjV48Y%C}+9`$uiL@y_3f zUm^dTgB(F|%;lyUd%HWAu~%0c z#jfEXE2R%Dwca5gmX<(yRk3^6#ykon~DRkK|7s{<@l) z9v+(HXm590mHq&7{}}L77+g(T=5^(il!Xptd$}G)%EH8eavzs+iitNs ze|DTlE%~JWzn|*DE%dGJ7Fk0@$H1k4BY>T1c!=kZ&+0`{UM!fnXNUA`-=$tls*$h9 zb48TXKO#9dU>uSBth-!qERGf^VNYhho0ZN0k=-i5i^M0p15>gXUMz%NRT|g2xnOo5 ztTTU(+6q&tyvaYys6VR3y=|=AVaQ1gm}vNDLk5VLzqHkW8^(9OYyRsw)~~ONV*dFj zPmUm;tX3VSBLlh%vX>TqCY4Vn)MQHiaZYasK+ufF^C~s3oMC zfQJXor_fe|uK?Es0{r;oan{pNjW)2jPALF7D=$h1^bM$u#@CF9g0Zf^-yeGdFy+w& zls3p$DghMgz*;AwwMVeqF$q1f=73$INM zcQ2`mI?Yhr+rucwULE0k*kfUtV@tSJ%CdgG&D4)K4Aac7WyHI}KJ1S%A;%Sz_-aQG z3#kG{endwsuhn?#tm>9>)h*%t2;HCcZvbuyCg*%- z-~uSGU>%&{YL~6K9CesTetkJrzBxnFbsS8Mhne{2I^|fi2-YfudFU;^4wsyKL?)M z@D(GR|Gj};!8@AEWSEQO0c_p%Hw+%#F2Tc8ir{By)K1Ddz(cj)WUPH5&LP_?{@nby ziO)yyvHrIMQ!kx-KB9mGtZ)(1wxJ0d+yy(!{d&^}69s=vbQxK0m53&P(~GcK+FTXe zYDh^o@Ajcn-M0|pEFa&|YuMP?O3K{N{#|3QCUTu#J?9ePChs_EKiX{or=o5{btmri z3HgV|=uM*D_}haLF5R0>vY4ry7wfg*5CAprmQo}dUNv2{)&W27RtIm}5A-$H883?L z&jug%{v_gLv3jdhXsex*lyqr{lmrS57cIi)P|!Vl!7$@!HvCm)pMs!ytcv?#xJ(KT z0KmQ}L;+3`KeD5=tgP7H0nFV&Fp`!DS#h7(C)Yo*a~cJc^177*7%hel+C}r{*wTN! zmJGtoFW@OZ^2|RTI21q-CQsFwxTbGCqnptX(zbYe1^?D1vkOG0ZbB0^=7G1vbtF#@ zNIF*LjiUyGXAYfQNl2br-MRprHj~_Dp~TxW6ivFu?(~+xih_UEYGF8Yt+omcO7W#U z1vbWt6>A;PFKZ~ebbKGG6}s~`T9auBUz@0a4Nt;G!@~mxc6Y!}?C{H}&J8#gb?!TT ztaWfJo8@VGx~L5B&+ogJlte}Xeu(h~`g{hwh$pPVXF?zUii%`^$|vNu+a7Hva;wdG+DaN{>(RLuJpfqUDiR69|CnXmRGs* zH5@J$C>^XApbi$BUDPLMnVIP}T9k=w64apx-^N;u^gX_QQRFt5W0B=P~Hx7 zyy#RQCFs8Q#IvHPz^F@f$OK{QH$Fj!9WmwXyBA0}fV^32esI6Lxu0HME^%A-`FGf# zpBnb2-X!I*Y(nwrGYXb$o%O>4v z6o`X~o(?#;*M4GJcDrlVLLbO{U)BF! zejG@gO{rASGk^M=NIHlB&+boWOpUa_gpHnGQOOJOLyhGE!nZc8%G_rbcOPbDYB3#1 zbe%-qdJa+Bb2^&*?B+HIaV3t(yC3tnO@ z#q3%;j2jWbpT8q~Z1LTAkBGw5pWsmxk4O5+^HEm$-oEcAIbLqNVpH=7R$bZ&GoOLU z@5Gb%&qq>n6GLry0tm?n5u!eO+AV4MVxLWptD$iB{{S&o=v(u=FIflnL?AVcqess> zhYJg7Q+27hMy@G$XS z|As>NGvimO1u4(+aEVE8OHeFt5d@O7dqdU-8s>9&0^wQGVVSN%FaSj3f6buiOOe5O zQSq-=TN3ZQO3Z%)<*rT~1b(`957n%4yNM31_%ur#XnpSC3igsHmTWZ^QCq3kN9nT~ zrI}WJVVn0s49zilB?NeoO})@mJ&7F)X+50_o2f+1&so}o?>kA++&n^!6I%kJO9umn zGI-*y47G3t{kGLjGdf-z>AX$yB&hY}@{)vp^M3gIqyiPLQ+aVzQ^>QCzQHG90J=KX~WOoG_O&H1rf zZzXJ6_?qQhi%NA~8cie-)X%4V*fL~R$WWgU3m#LwYD>7wyLj&?J#%c|Ojx?m@|EIiRdyC)mbzrC?@K4C_PG~Wo$9E!9(mzBK23N%IC4K9JcbdX&A$ldZ$_G zgSc44!t*1(zx2+8-|xtLTX3s&Yj>_bkkZZcPqcZDJ(jCq`FWJ@O}P2M+RN!CQazKP z9!Jfm=H^xHHG!VYTynW=g_>)5H|j*z6KLh$6=ad0RQ9Ds&-JtLd-WgnI$J_&??%KU zXp_i51=eb4Z~(`gbf;|aKfZwIr!me?Ro?E!11~-ObKsw!Q57nA)`O&;xOL5J7kn-5|jBr)}v-b z*x<(?RNwvm{<;vHml-21eMh2V?9J;5%4^O-e|Jy*bsx)O|J{~hsL1ofq`AxZ(s`gx zgKsY~S4pd)hr#WyuQk=GF!r(rN!EpYkwcZ-dyz=w<|REc>c^Dr{5=rq<0%rY&)lN9PgUdiQ_chM$pA-`{$@j_nYQ6Xv0e|#~ zpCoL&q&CnaqTcA?T7D}-mQ+wq8YM^gMYZ{^Bx6x{8T&?kf7!gh&mmqEU{3#>3MDvH z*saUg zB&~ZZg7Zjz;_@;Rk(-@fm4DjUpPJjDf=krwW^IA$)?XU!b#7&M=ER9Ch)txH$s7Ka zmi)<$OOrx&xA7!WQ%hc#+bAQNU>ZML%-c)+o(1pyjAs>8xR-`49Bi+2O_<)?=`&!} zqJLW{c0Zx~6omLrmY)?$U;PQq3F%*v$JJS#n)Qt0Eeymd@vq1R&n}Gpe0km!QQpyMSYJD=(I%^`6vT}<{?Ogcd#GgUwe*c4Fs8Z0RbA{BKkYBDE@=}ZV^k>|2 z_N;~veKp<{)@>{ad{o&Ie8srP!pN$HSPW*h^w#nhdJujRA%6t^m;OKaw$S8)p+qe7I_N{M!)Jqh|w+W8lj^3tj!72JeA3dBjp;nIZ0zXR#7scC_VVBlMl+q(PX|h_0=O}Eo z`U+1#^+kF>TaL}Pox$q$pf7&z7J52(Y;jkzeVW!-4Ohi!rXKp&EjgIQ3+Ud(Tb$;y zyDhx#*d`fduG5w$v3^NEPC zOo!g3_HqIKe#IMMn~ErMm_f!PsUE7vPF*`4{v9E^pMwWk+h3X^0p$r zS%B>D-87@*(MXH!wF*2=>%2z^Oy5m;R2dYizjxpn$I%VWRMIc0L=4%DE^Fq5^lg}8 zw2n@7ZS@hvI|5VMxa0a?y%A_%(Pp=kM#Qbh<${XZAm;dyq?YmCj!UX!X* zk}|e#wgav5_X3DouYfmg-F2uUMU81PDMB2==MTQ9Qq@rw*&vFZey_M{(>@wC<#?+> za^qvXXo=$0APMc4WfIgCKli9?FA0ly;s!pp&)|Z5Kt)wUC&%wg#%?mj@d2?10!8Y_ znuM6zX-3Pf?`E&4^1LHtjxwm`D$Jy&m0=FRX-t10SHzrQFtz`5^)B_(m&zaexX5DP zf87x4Fhq&Wr_2P2m^i;N(tD_*7^g`4DDK!+IB6r4ZTlg#{$aEd-4LmgvZSAt{9Ayl%|5&HXMY%9JY!nrL-#|}&xEKRnUtL8-%m$aw%9+u zYPres>xidWK7->%Jg(UL)F3=h`&Lq1foUzj?U$fELN<=1k?~ZGjQ)FPfe*EYZ&(sm zkr>yvY;fOjMAyH;c+r_`H2QJ!q4)!fRbqRT@$ne52&aGhvSv!oUPS!%(1THCar^W& zqlvWG0ZBHi4suQcI)j#ZAw<{GXxMzJrKmxxP>dZ(S~P}xUnZG(|Tgkh#6%nW*Q-Fu>Q}f2}a#3xRgK63rzU(o1*^mAYqk6y86}HrP z<^U^hMjzNYe<;`6^0HYYi;t{~`KvpmSvkM`oc#NGoHLV2$T~k=*XIgqqqKg>#9xn_ zn!euMw)00#xl+(xK|E>6aeN4I8t)UCh$WTp%P5bGlv!C>tbljHPaNnu4>Gd=xsu-) zEW{DJvLKTtOcB+#(h?p(^e#?Wre|bEgAnN-HfycgODB)*L)5Znqz180^NDq9wML1W zXgCJi8}->F#Hc%YV>*gCnirgLB%~YMUrjdnB>a-WrrxTLKmZUEWF0ntw2k54*FWMC znT=y-QPj)9>uSqa%3l&=CE=KepN)4NgnUGEzh)!aU>NlZi2Uyin|X@|J2Zo8(P;}Z793r?(N`#kP3pUy>k3+6g4dOj)YF`iV( zp4G%rvyk_3aQn@#%(7m?CFa_7c!}=~6(}U*6bvLVJda2PGG+RM#%B>wrPD4P{N&nj z>^*4%DX>5q5>&zlT*p4OWw*Uvurn{ZlzeXJS<^+i74@T_0nxR)MBzU@H+gABiIXtEy*shu(dpFRJG(zJLcp#TdaQZUY##*=-b$?_pAN>7_oDM z6>mMMEqQ*p=IDvlkhL)0?7ZVrRrMS*gq2pNmlhD>#0nXlC@Lkwz#Yk9Drl<5v`oCG zjhW6j4o@{9vEm-LYUwUKkY^V-olBsfb|pH*o$SX5Np0`!cdqsx=)GrV#&Cl|s*Pg< zr@uhp@lucam&Rf>M+;URr`iUGJ+tZFyEc1eKLY&f$p$Ff7Lnm=hg#TQ6dc&|P-6Xo zRNP;XsFC*(0}K}jno%ublSc?v3`VNEk4PJHx)>fxt} zQD0j!k?E#yG07rlz$g+qRmFF63vczhtyOA%>K-E1%NLv+1~~c%bllb+{=UYaF7Ly! zM+q%aEI?TM_I7VPDpJZ6{N( zosO(XR5mtV>r;{DkC&Bb@SFI`?~$eN`ztV>(6%=0&m~qpce{*0gP%$?tI(Ke8Ca+! zBd$`zHMxrGydV;T{dk6^NlNKV{)d-vgoA=H43}uWe`jz*GS7Ir;E%2uHAhju7L`b_ zA=UdKo2QD#uN2qc!oq*_hz97>=W$}9fb zNHbZB(CxPwWmH5Q;d4)FuYL@S83)f(GrQuyXrGA}CIuMhzb2w$w){vd_n09T@=Ji! zek=^1NZi-mv@G}#iFeSS@|0BM&AZ*RmFX+y}@rjQOb)WWXUQ%>%&#s8+2jzeD18#=4--+ z6Ekm%Ti875$$^&!Zw1T1e)Y5w=CPdOc7|h14BM_o3&AyO(Iy-0$NGb={5B!pUA!g) zIZCqIS;PAppRw`?F!GpQOLU3HJ?$;b&cvpX0d=kLsUnPSfpo)n>toZjUHaao{XaV* zDtR|;U=fFBg4Q3xj%5@fVj&!(^EFm7maY~000G7ti^*J95P4yvlm zJ1RtTIGQUfQ+JPz^?+LW@hL}O>PGcF<5%}SXI442*>VhZhd%A$YW!}?Oea$qcprkl zp9C;iPMm(j>}Cj@`uBbcpTB;7-r#y&Jt*_R&-z~7zC7}x6+Y))NWA&2I%pU3OSW&sB%*19SupE+)V>(SDsE?IqWxYCg_XZZ z1m8~0e)g*-a})37(h`W#QN2qgp`*r(&+DJyr-7ZQ#~j`Hu!!a0hr@*w6Kdk0WA_Wz zgPd0;X=oa_na$Y7OI$5x1XzQ`ZEF-acBGHL2ian~9}h9#wFg!AkFAk60OrGHpGtyp zD_jv@=7+w%S{ST;J+so{#cyXHi1+8Vg|%BqushX2-GC{p*`CBOw|@}zj@M0EP*8Br zO6`Wp$_`CoqOG=N+IAIlB6we}hHQB=)YNh6Zr^Xo;k0pW5yt<>F`WZmD;C1gSgNKi zJ~~i^Q47K(UDLH8)9baBZpF%MITQB>k;9&Ey;&rhQ0Z>^VWsik;7dtn8^1vksAM*NSiW3@5i0 zU*NZ1*zoRO(>Ss0;bL}};{%TXq_1vj;;7y|lYpg$IcvhCMerKsdU&4wrL z&Ou*vM{S8zy6S(M7#{v0^r)p zf8&OUhxLeMga97G0<>{zhWS&>E(rL+x^(xE68^1kD}wyIGY3u3zTKgdai;ZOdh@if zky{7<@ia&H_>F+<9Y4PPxG=NV^EPLXf6o5gA6=9(i`a^ZFKx9a;!wm>2mqFt!O+up z;70=QlL@@JgTrZ|4p9R&{+aTq6;3D@YO-H7sz}eJ$Wv-|+~zAG&HZ~E#>d$yCWUbw zaHtx*C=d>rlCSW&G45t>cNQ!C5lm&Bg2G%z@NHp0S;pJFu0iZoI*jFz~*(r-$pZS jF0^y^-&e%jGt5Eu;`ElaMhLCCa6v{wUOZP!`|bY&Q$^dl literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/background.png b/awesome/themes/themes/vt/background.png new file mode 100755 index 0000000000000000000000000000000000000000..0d882b7790c2b47508bab27e3e994fd02c1fd2bf GIT binary patch literal 43786 zcmeEucT`i`*6$7=AV?7uP@0N@inOB=I##d&Dk>^XL`4OXP!nom0Yn5;L{XaM2uBeR z3keWNs8JA5Q39k=Lrp>r5E9-Fmhatr?)9Aa#vO0GKW+vNR`%YkHPxBIq%Z&=@lsk6yt2~RWeWTy5wv6P5oz!fDShS|_A&xs)Ld9vsq zWXJk+6nJq(@b2Tm&hT@=NUy-N01}Bbya4kJ^7cZUHG~KHq_eG70>JaQy}Py_L3Iq% zSm7G>4<3FhCk<#lOFX}B-`d@ravnWm-{ThQI+a6fuRY%}dt=KjGux)uWgWVU)0f|e zM=hP_%nLd5$H28jpFNEE@!j8sfFcI+ZS;$Q#HsHO|6%}9`~J+|7;FPX90EVT82o~q zpSONN&Yy4n$LNY$`i*$t&ujeo%719ppN#ss_g@VDOvRtC{0+K*AJ6<;{1<~?kn{7F z#3@gS@2vYV_0Ki_Jov?8KX3h<`tJ<>%!EH*`47?ce?;J)srd61NSmtIH`e`}`WJ)$ z6gPg-@gHK#-=XX0Gd~yq#o#|g*H2ddT>KY z|2y+n#QZmi{1?IhFLd_jEij0b{%;WZr=;zt;r?RqH*ET+I{yL#f8P2jlfN_g1zkUH z{S5+tF8+50{}1WbB5Ry=d%6w)^;e$yr9d?Xi$azEVYBYoM`vXNSN4HtnjREQUD<-IBZp8;BZ2O%W8> zqEiw~6MA08Sk&)OF=J^Ws8XOb9|6OUWW*55y$+xDf4q9P*JGWbaT#a*XHkZ$)6PU0 zde!Upat?iMb_OINY7(auG32WQ!yEE1tsuPgy#y=~GX`hT!TJ*7HcAuIJ0WN2a_<_; zl5g|f~00SDkjld9lXa0+Q623T^SGHa*k;=f;} zMVc7*SIdC%|Epy<_7cCQRSDDVnjvDr0x>!ZNd6(YMf@Zg(H{Q&W~zkVs+*b= zL2fKCWkCf_4H=18BN8P9qLy}9oMd?N*XzUsk#2z90#m_hM1!T6e1d3JMa*_UQsUGp zr5&eUn(h466Jqk2xW5qbS~2ckP-Nevw=l2+iiJDCS;0j_8hmN5S>)KOUn_w#qUX+n z0{vS}+9Jjs(Elsx9QrjO7tBKYp8uKY)e<{slsOvk1_1Z`74EU=994+s9r0!t6S$zFPiTJ4EL9FRT(2_BR}QvJ@8h z7i3`e{~BYI7Zb^xUvtBF(Y;@zP>$EdN(o4t_?`u!h)jRMTETC23pP70$xQz>6)A|x zKJkRjzZ5I8!{8satAO_)kkh$YiA#=4{svVdoCU?>XKLh0NT>DR&U*Q98O9p3OoU2i z73FcwVVQf0PltFC%u83vyN1rcSb!FARh%d2WCOKtVurBVCrM!B0W`*JTMa}28y5I4 z^$ov4JG-%}DHH!@j5(T+>dMnD27;uWZM?m03hOtP)lLe zKj5JvhBOp6B6Td3ZC$kedbW#)nsu14bV1bsX(ITewM|B3%EJ(mUjSw7F`uiAsgCk* zWreWE{J-nGD7*%TQ^4VGFem~tJAj@MI&5API9t`2>Z}TTkzs-MR>^S8C^Mx*hw=tH zDC9jqKvNR*PuqTc5kZ~`rbxK2=2MGHAR%c(0S_(suhF%j<5Pr7o-QeHgKmuu6&bdvG76oO_4QyzbtVI z6r9MJ{)0{p72di0Vcn0v{BCmpYObpw?138kGu{vdGSVW&{s*T{UUv1k?vKs?`wb`~ zgx7zFSQJ8m;T`7B&d{MMCJ*`7GT8qE@j>za>n*PBdiqbR{R@a**Yi2#@9?34%=ue< z2)X%BYyPVpt_Bzj@bV)P1nK`4054GTJq#+`iwhsR^fzX!-1;{*5DS9T0!)05Pyd}D zskon7{0l)YCMN&2gnVVH9ytE6Sy501#&g?#NbP?DHC<+FIq8RniHz{y80I1{rTS;Z z{uf-^fD7{c>qT>xVzjN6|1b)Xr~212*nrdjYrSqkfF9*<$lx;n?{IAmWV+<) z6e#};NB<2{4KjRxJoDYm!Hxd7q6Wc9={32Jm+t~O_5?N2^UntJ56WxxyL*?4X4yFN z8Gzqw6}|D_GbRQ1UXp3RpB-Iq|4KQvQ5VS(_^HyTA%awk`cqus|-zol% zG;vWhHQKnI?A5KVRpGHySj1(tRA||R{Q`HLb6C$lmu}Y+0Fk9}(l|8Ab;Z6}$n?Qx z+rp#h+>3R6oca8+p~)6j;ZJ=06Dl*`UnM(~*0R@%A?)7pSvjGYYldrAzNwI6YR283 zGlwY+&6jX<;=9`BY#UM<^5%K=P98t;5cDViWLSrG4(Hf*zhNx?q`3dEXPlsPegY@n zWqKIdIVd59_}Yv-JX#SQToKLpVv|REO4Rpznd_`CEbsdXHVawsPvGLdgiO00@n3od zdNkNy>7>2oB8yu9SjZ4?PRaik_{<5I_a$}0vm1{qur-% zQt@V)_^I%pq7&IV82kK0bf--K0X0*6`i&s!v{!MuwB@srP)lj80V(EYnmuvE@7%%) ztWFrgZf~q$__$_kaF{2_+owQY8A~n@oN)Cva$23dYSni?xR6SK^MAMQ6AH()2z!j` zo2+ljE4&$_J!c=@9W(FIko+iqzrdXGc}5@kS%E0kw5;aY&P=}7Bx6O2jSZ_&cXBZk zEHGreYyQG5nx87yi%}+e%eJQG7T(LbMQ~aTchA@%%r+PifA!65xM>^~$2!t(jh1cH z!2Qh&4E#<(`c{CHemBv4sjvUG>?Y5W^4ZzI2e%eG=h_aZ#U{L$V(R2&lO7#XAxUQ#7{o8Zmx4z`mkK4}-R`xTVI3dRW0@p4bjlsBAsY zvrVNrT@?!Y7kx8O=Al_$)6UlOV3CKs=MLroa>e;PUsIFdvnlvz((kZQ z&F@pug2-ScP)kUCHrYDm18d(QH89%NQ74ozaYm9II86E^nY0D5<-z>0#YF>qCb~5zHJ`B)rJSW&$MNe(C1+vRc z>(5&k1DO{AVF0Nz(f7gI*C|-dxzeF}zo?lI|I#VDy7uq|>}LMX9;n`IRR;%4bgf?& zjL~E+x+mkiF4qspLSJK#v(2e>7KNtmz+BJSCkNHxvLrLt1IMyVPo^KBzZN_Wx0-uZCI8z1`NwhukWFus!DUo6;bv^ zx+^gXZz($>R;y^wX(bTix{`9QFL3SL#o~40Mhc?T$jZWY#NxN~x%BH13fbRO&nIjj zl9bhbKf6KLttyp(b;i4lv6 zaFs`j7Pzqxu&)B(GGS0r07|Vxqs^@%f+}Arvn0dSiq2k;?aOayDV@aH*(i!}rK|j3 zZ1%+pL#^5k9(KodYU~o!Sl4^79GfU1er&L@EY(vX!(SVrQ%iZyYEu!EKGdy9$MtOXv3<%xpFi02%{B#fwkRH;`)~ zX5lX!&-_;E7)(cQ`U+T0ZO)LrJeE|g?;73cF`i|Gj5^}890cHR1;Yhs=dKlahh2o~ z58Kgf%x%9kHCa%!^qF;u*rKKa+A@gQzCScw(j0W(ncgVyPMNjvYkoAI8TYQUYjCgK zsu^I8^1jkr*iT2?46=?COeNbv%-%m6Nb*qUX_npb1CrjlPbsoY=INpZRlE$ir*)N6CC13)K>$K0B8j2dL4MvGt^PZdv zdQ^qN-8+VxoBn1`d$7su5fLd`~68Cz&|#M{w8g>e@ObulBDKat)S~AjVBR|EP4xS9r5C4E-5`6PUK|%p~A@v2%di23=^|?ODEgZO|<< zs@~hg8c=V)m0=cAPYqixER%BE9NM3x-&2=>i&{h#HtnYrv(A)4P}h#9pZ+~@j*Bmo z8r!PJ2v5)g>n@A!Y7J5l7TYIno4<&2TZ`tX_7TcEktX33y0boom({dv$E;cIA8}EM zuEHRGvffIJl-U#Wa|h^Slz1xn9bNbK>(=gumKs-bZak>2KawZVY2nIWY(@^%QKeTy zpI%cJV=L^Gq}KU#6xb5?nF6-a?G~*$%g%e-yh+mXPNBWRp4_uoyJ49a;=&!Oa;0KX zpn~_!NYLAqvKR>{_-}iRj_Fw#XquREY@^NJGg9Vv9k-MVVFzBT4FiF5(D%%|^82si zV}!okc*5?kYCWTWQrJ48CBZr8+@s|_U2IcaKHC3 zuDILay8g4m>M5-fv-29%Qr3r;Q=i|0j458WBZ2|Hdrk2LN%awFX-112kz^mF8*KyuAW~-( z!1E?h(QF<3!0P+kXkOQ}OwCjYty+7w0P{R@cV>Rx?6o>qWcG(_fbF%?{MHGEfKcoL9dQpp$KX?t2qqMZ6#E!B}}H!aW9e@%%{_ud%o2y*Ay@Y#;r}EVg-&P>n8|{`mLYc}MA#r|RGYR0!tC~Y@ z2UO&ttc%xcj=z0+&JQ*=`(O}s9car#-us99w&RW-fGJ^;-TKcdl~kkf{DY2w4I*c> zXEc13&6Wq-zSoOIiGtOA03X#H4-Y^ZaO)IGQ<6)>W2mcjVCg|HIC_f|}m7$GkK9*%wPSbjV|o5}eQT*TJ7Lur%CYAVlqp2Rpd(b>HzNK`R9rh`hhJgK^Po@bBJrR` zMcam7XxoNMepVLTy?qRV+GJu~0`ZAaX7ij|bfYxU1e<4gqt5pdiu9;G{jRsf>Ho1h=KDp=y^^#n zZ}zIy$cNV`6L<=D9^1`p0rRJV$NqVzC_Dd1R5>pt{dxmzUfqVhSAtm=z=_NaeIZnT zQZ#SnFq~c|fq0wUeyf((sF6!rmf>4*H)kaVJ8ZLp_o7#RN8q8gO|nFSc1c@<#28v9 zw)-*Q7SV<4-kd}h8y%*@eainqg3o}A4|f}^VXxiv`a;cbSstnJALBk7Jb`^C$$Yse zc=EiflBea8;{2Wd$(KSu9149m@P*3(tBpnpcgk@$ADU(Jdu#MCmQmu{u0r+RL_FC& zYZ5;EsDwS_UkaH%BG~F2vpJP7^G<|QVTt%Qm`uqztE8n#NbLe`%oCWirnwqAvBth4 zb0=Qwno~x(?zd*df^var4qemw%NUz zM$*LmEhrM$^gVLgu7g7_qezB4rA^4G5y1Nv=sL`0iQU%*b~*$g)qiif))ZA9tz{Ol z6%-`v2!A{^efZ8{rCWKD-Jnx>HaQW%=tMbr05&Mo**Bv%D^X5OzrX$;@J0j@^ye2t zP&YTw-dtfHKg~Y48ryguYst&p3k6){upy5}YEF-sb^A%ViX+wRsz_EbfR*1WeA?A) zg~Oydvf&JXpDm;FIlCL6+Yaa+K`LdEmfyeUnXZs^U^4)h8_F+*hbEvx1260{j3>oF zP!IF-((Oc~6?`p!zy5O3|B%96E6z2tPe~}x?3&To9bn8e_F%fH!M2e!4%+F z(;7?OTQBO-BxJvrBf2|k-HYp<{e)`nl%0X#YJVSXyBy%rztH>=1wZGMC7EcycI?IZ zdRwg4@%Cc=uFH_=<35M5*q~s0wP1cy$8r+NNSDJ2dmoiuKm`yvFfD6A|7eU zGb!fYU9`I#8P1yiDeL>`>VZg-T**_P&OWOp`^^EKGF;t`0`c}o-zvUhtZr@bCV72l zclHhdram1#@UEcx!1h7N^u4b`yI-hf)vK?yTbixoIW867Aon;BM861>vU|_?ZT@xA zYXHyjdkav58wRzWjAm7{duw((h063ai0_OY0aRl(m&Ce=nwTM4GP4idWo*~-7=LpV}P7# z%r;OVXK$oOtfc`NAq0WIBYKi9BxNUm$hvZswYu|o9s-}rIfMv(L1)?Cig@&DGN-`i1Ct#IOp96CKp_E6)`@xdHLR`ap=|wlTX&cn4}dCTH@=~ zJzs--wVcWxn(*s+g>chIZtxC(frk1tJO8p1aNem%fK7U-k+_E&Wtdd}AR>~w0w4989`3^x1?79~=`43Cf$3*U_ zXYcQe%7?jyYow^Ft47SO_}|z=;i*)+`;qz9^)I3|oTZ5YI~Z@@w@2MrbCi&D4{p70 z7TH7o>g$5QEE@^a*NQHU%`U()tK%=9Ph67Ww0 zklsv#ap&8R>0Rfj{uRrE$X>`bhp@eO8{8#mx+d7t$@qA8sg_KDZN&^#gvUu2(?}gt zmrU7HRROtfdP^}*IV)`nlgXo3C%BWiK>d-$OivedGsTXJvs?C1htzlcQc3bls_uH# za+tP7lyzgotT;qwK^-sErU@ zeN<$+G2U!zIK0+K_GtN>TZ|}?J8L12OsX)|t3mn9) zg4|I1rJ+!-FC&Kiu*hwxWg#AQ)i3XeBNz~DGlJs&X2j-;-QqV_{5E80o~|NgfZD@+ z?^|xyXzgd=qLd8?{U>?&s7>08GgBWs%{@-RwC~0(sc$Ikj8j%1I*>g-RR`ps$IljN zuLo^E;{w%vldya}z$=mqae0Iq5E}Oa_~>Mhc?W8d*r?w{RPHk`QNI9eUO}eQEfuoX zDWk5SRrmY`%!mGF$xb?T5gF_SefkH*`(r+S>TQ}>_&W?`3q5oxj3Pm4Eh@(D zv83K5bTXW5f#kKzvT&c$%O_5c3|WH?kHpz#t4#G)XtKWAdv|+@1DG`40=3*$8~1T= zxLdc=?A#VZd7`GDgS$Csotv8Ei1voT#fw6^_uzBG)(QpZs~~1W(bhw9RPjY!?O$FR zZxS`ez+#E!d|LV-t%AQR6o{UFfi-wQk)*qoRm=`xmEQ{r{NkgU*wV$P*%re|wu4!P zS|K_Tw6kY@dU7-{W!G_|;xGYtwj%!{EmU2A&BH00X=QS>Tp1yZQHBcP!b#b?2({BY^ zPs~jU*BAjD^T49kBcp9P0rX?!4HC>={=`0bzhQj!QKXFT%D8z!L!er5>YHyZ815c# zPDNo6lG1UaJYhQ&ZV{@2vCQa7T!A9@(1^dU#Mm!I>ZyeCua$Z)F6~v(jukvW0c^dl zx^(==8mjzqe=x4rX@i+Xz5wHC`OH%Kg*m=pZ8~j>7^1y-)+{HVq>Ug;{gI$r2lztl7G1p3j%xK%3uG#yGk86V`kFq9^aVzae2D$Qs4 z0Ts4LhKEp>eJ;T4^8_L>C>EV2TRlIXA`*tEw@CFKrrD}SDBN=#g}q-47ErAcR-)#Y zujZ=krmt~TT0(S1V&(AGb+lNYVVSa`CotjfJ5%FM6SPXx`~WS_ntW{pUmlyeh*FfX zm{QqF>>S^317ufxLNBul$#dqbrGlAe)>mJ*djy41I>O{}TgI*dV_e8L zLYghLoQ<2(!HlWv;?(5?qqef|D#dOAO zj^!23CC7uhzkoX`ecqg@or&0s1ft*eRg7n)Xo>a#a}X#=E@44Py#QQg4}#+Vw0b;C+sAAA<8aAWa=cgb*mqxRdSFWEtrDT& zccc92BP=Qq*}%>K=C~&g-@^9St^Ep?lDT#rcf&FQutV{*G%qaSk970No8!jA*fZkX zp+8n*ldq|7Wlm|rA{2_d+b^3%T8Z?jSqy=HSAtezzkEm|k6-LkCPpNC`l=DiqFQRw zo{WDy6m~6*x@i?W(%;Dx(5^T#aHE?F?R~qXuEaj#$c@?($aK$Fm6Tfdt6gLK>r^0e z;xOJn*V|DEx}@fU6tiVfSy19ud9rN~&QVQBHnJzgc8url4sDQvK5)kw# zmqsX6lrQ2j{nRsyZ(+~h26v}i;sYqG3{%JRgS+SZhU7l9S}&Gls$GJ%PO#r~!7h3s z-~HiwL8gl${_2i6S8+A;J%+L$r`aA>v=pl-uN?%otj@8vPi#|dx_SMJ9)?%op38j0#JPoWM)$JdcvyG(_@G3$;pqT+k)D*3+mM&+AnuVF zT5S3-!ABXXaV)8dS?mB9PT))KjhlhQ)UZUiAjU)P!L+OSIGEcA#w5e=9NM zqG6oDF4K(EvF@a5S?6+-opAaVcs@W4>Jd04zT>;sIW)9d=icVKw;$8v${UxbpQbt( z4A)&NO;A=`k)jl&@Gjc&cHfm$l9T7#>m}}S)ZnfW>Bs&o7QUD=2#ve}X8D_;QZiSN zWdV0TO;1^a$TnXQZtXVR?$3>lvC%8gC-q(G8oRl@r1=_kirR}|^BIG6t9-bpyrI%gZ6bG%fUIL;eC8alc$xtiuAr=S!& zUVMul;y1O)ZzQr4-DY=E(dXZ!^%z{o zkKcu#(p`!nsi356;Yf)9=&hHoegen|FqaLfPO~hyneK-l+0;>Nnfx|kMOe1n{+zxu}EM?#JQ;};l*VghAJ*gY6-0!u@(`H5!{}) z=Y5v*mdEon3AfcT-f$@G#HxaqwZUT$-1*#s=K;8T&pO%Ilq8i{f`e?Fk8kG+%Dms$ zh3^o7Vz%+So4iCa;H*Dc8r;n=F;4<_Ag>73B+SXyF> z!hL6@{R;0w!RjE`J4w|JF1u0kX(t<43Ju3={?=AZy^Gs%b8)sem_Qr*w>nIhVVMWj zS$o>w)`)W}Qbwcg9~?NyQ^|Nz(|c`uN!&H6%eDgLq-3y{fVK>OI;PGZ)GYcGwO+U~ z223PwPSCLK>xa7ic?+OGSm5Z zHQ919r0vsdtkSh>JgAwK3dlb%h?TKDKeo=`UVR*Tr?_6m(1U!L9_Vt}dC` z5?F(xj)hp!fXJoCTF~6C@|nMIm`4#aKAfIuIkt65>p?l*6$rPx9Y1&Q-V%KN=|r({C_JC4otmB!IF{lqBA6oGX~sNN_LIoM|mkNiU;-CilR z?D~6ayPnxmv*<1I@cO-@yfeJP(xSoi;pcH(L$`JYY}aTCYw50ZChI#XlWgvRTQrmb zoz49Uv;GOhF%2+qZe~;)jr447GRE(H%r)}F-V}CHR6aj*lKtLfHn`03D@BHQsnNGi zdpEXO-u;-4^$$t~GWPX1M)>&NhM1k~8999&OIl2q2EnrULsT7YpBHb>+n4G7-B(^& z+ZTeHw_hIoq=s6c1M?g$1_LEizdL@1+!W7Ov9`o4W*%QU`7TE4W#wCn(`})qIb!fw z86){R{Ey?=2yH_{-qO^F#CM5Zqc1;Ax0UP?=N9F)+k3rfOI$a#E5J(w3@sY58HTng zxP)!^`I@i8;~$dU+1w>v!ftLwH&`_Zdl1`s{1A$1Z1o^0rh0Q}c5;)XwGdexGZDSu zt#ec`dXbTa{*Y7o(x4!CRULVm+zwXmq#xhl3ghN-PQH&ewn&x@;g? ze6*{457^C663lfP>c-{4^fLp2EcAHj$dk-i`Rd2qdcx-7n_As(z#fGtmUUYeiPcP_ zG?hdTCz^kyY@BGd%7xAmu*(-QYj$w(GwSL7gzUYb>DfyYpCsdpnwW`%-9avwunA0!op$eyD%Wj?xW_ao++gO{&no~rtAJIF33Bq0<;r5Z3|$)Rd!SEuX<(T=&cDikoO=jbcQrXg27>cH z;;+6b**^3})7P13u~TvJ|mtT3G}m^Mh)b?kr2IJ!-;G&-=kZQ%9w*vVEsV^D_2@ebfAsDqAD_ z?=ArsHA{Y)cyDXpO=BibM_d*!I%t&S8dQ zlxFDMTxP$?V}*_Wx%v7IZ+MES{N#6X1q0$&yS*+4Oj$77W+-5c zKWrTkHJXT&OKw-&sHiH*+{04jZ8djO!>GgbX{0X*nsG)bki~eP*KouOL+U^l7<1=;r$A=ziDS_5*{D`k0oVbsmJCDOw|N>u4Y7!85(le@7T-x zyMPKr?l^#26RYpErxD9>2Wx2D!O4)3Mwz0VC*FR&H2;Hay*1DTl0((#^yL8hNhazQ zWZJHiz43(Q>l+&twaXu8$+!qqM0QukYL?$k4&A3K zqi3;BBZ$(kwjE_4GyhU020N_!Evg)EbeLvaQBkGHmzyIZu9xqY?WzK-x}MQrd@MV~ zw)5dvydDq~d=TRX?}X3ag4UViO>$6DOYkKXHhcKiUxB%a5Rw=67-K~B4oXj{rQK5yJI*llV!@%#3H)lt<8%Vrkk+w??-h+ z1rv!%+}TZzTY-5SSz?%F{vB7a)EIDSbDSkhR3XM7 zX1-E|RqLr%(%8hR_l}G8tXAW-Vv=9jcjki*4$S6F;XsycHS}42h9$MGzgr`g1 zd2wFZCi@H7OV5y+sBt`7cj$|*aSeHLmX-^K@Lz}gQ{J=IxJ&jLt_idq#g!qbvks2# zHC-78GyDJ#cj&p17h{5JiI2U_9!PY(3otVRv@K|j?bYs%a@tm522g-ZaV({*rKBBL5)?t1J>;+8IE|x+{2%tQ52v zPbYclvr1)aODSe9iRC8}xpp*Rl*~Z@tPUc z6nmyY(3(!bO$GTRmKLF24Kq4~B|Nm;^)7J*!aLitOeLU-wKX1~x|o%>w!U`E%)&Wm zHV7-8YGINy2;_@07OlrRGOzZmgp};HDo{@%Dc&ec+f<-@9qe0=i)2_?6S!Kv$N8u<&d?o^w@C^{SJpLY26mYPm+t z{M+$&^$HZI-2&8HIwOWSUUQY{8d3#)J3yZgH3gyb)BW-oh*>2lPO9q}W8bN7vNq!jw;3$x=ocKtW|-bAUuK~7n}TL=oODT%80MF;bPMgX;U@m(M16TqWBX*EF91XKAsAj}a52>UXkKEonwIx6I=XA$D+o%sK37w{ zMy86DqEMCCtfqKdh@n=BeGRM}ZlJ~JbSy{Tm`vE&Y z5C(?<(Gz&9=_y=d(AT!~km{5{352I}c~mU@lhe54>ajiv`f04o)H*8&mGK4kHJ-+< zhNb^OG3}qy4D?<^RZeV96RZqO^32)+RFL^i(lPh6kkm)KxeM=J~q+$_L zaLo#3#$E;1ylegS62N#mMVh$#bX}(kWuH-@sOupxc*OAHn?S!(xHRL}gF9sd_k{iU=;0uo6p~_L(Bt^l+(4!3d zX;O?VPv#i?!DDgI$Y-$$`|r-rbF5HzXUb>C3zOdpGr8>6-MomghhOsfPGBAg zzUeqH96Op9r%rPle^^tk6e7gZN)Df{&Muk!<6|tLyY-cQN@z&?2uXd@{C$41r|wMY zSZ8;xTsGzH5*PJ%vk?Wf3;k0miR_OxlVy``W#e01t{pu}!|}GvgtVoo!Y@WOMag=4 z*A@0hOtX^-U~pH$@9+HsZ9mrI**)lCbiuFMH*%(f+1`K!UCh<&k~}%`u~dWnv-v$Y=$GIrO@aD~E+oOT=UuK0bb|z;N9LJEojeJ`cdjPsI zA}OFGR=0VtWK^j0(217YD$Rt!x%Qmq*;rJoT2_8|pXiYCx6jW3_yWkc&%YmlEdTb% zF9u+r|JyU*U`a2Bz!K2j-3#-qk94fb}r%a&Y;V|msoML^Yf!ExgpvK zQGaw-pq`)M_0$ zwx)nIq_r%Z{!UEYV$6zlFVy{l8rx;SnO*Br0=NNc~VrG?<>d6RQ zlX?8(fz8PZvVB>(Ur_SSQwMxHXPSq@4pwYzPOr~8@ik0%bZXPc{({>+$e`vKAd(MvL?)zgy^2S=oI^1TC z5UWpZl0gT0c*j|OlA)z%KTqduQNa_%47xSnEsQx!Zkibyj`ihICrkP*Dk2+=!lTmAn&z)g4ZQVXhYXxAs3qez z7A7q%3E%fK zlYLbd!LX{ z_Hmr{F*Y6HN~VVl@tiv8WNOZd25D)fw1#C`P~z^c`mTdh=Pt!SUGCWlZ8v*IpLmGQUfO#v-`cl6LM3&QdQn(%>@DD-fq%U- zH0G4M%9G7HK{U)JMNy@i>uNq1{m0Vi`T8Yqgv2{E>t!RE)7&&4u@{O2<WsHONW6kbRHLqyc9A1C)L-T*nwU}5 z?@2NVs{YSOwCmYP`w?b!;Tvkx?<*%g|e^)Qeys$uSHp-=8aq^eoX&piv5 z7Os*I9iASo=G?RBs3J{Ycr}lcJG`+9kLg$`CW;+z4Gr-ir!~X7~PRHCUzIDvUfJW==QMPQI(iKk? z3Fce=%i`526G>b6vMUtWK-S=)t>X~0W75$_^&|-SOD{7PS2nmFyBEVW+97&T;KnN9 z-57?^(rQlbU?+CpTw=-Bpt~;-^I(@7z1L+zMf1%l$d4BoSS1Gq5=Q3_DQa}TV9qFlH9O&v*$<~> zTz4jS-eA5`oGV%@fxf=-vV%Biwc8S=`AGgVhC?ZBJaRfS%u@-oIVYO2C39AD)m-%C zxhW2qV3)}g-WG=ygcQT67Z|SA2l#h)Gv>Gy?g2(D#gdd%!78K*4I^#AqK3QEbdFji zKdF2~FWfbjE`5uKT_e@>K^O_P1EROT^IzeoZr3()HWYq(oo9O8Xi3PyCIv7*$2(dA zg&xh-oQO}8t3oxBR>XQcF5xM~q)1oM9HhZMR3RhXbtip5R}xCqEv>&_*=e($BOJQe z6t!(w&CPUqWM0=1L>Q3eVj^MN?;X(}zS<0I#7?=L?pJg(m7B{svvNA$|IrgaSphOe zad^fE)Y_bA9VdZd4I|!BU>L{P+6%$;hBm{W!+CSB)(Y>^wiwhgpbQaYEtg<6Dn-MS zR?SVBj8MMbubAoNh30@&@N8cQZqsaN>C^G)D{uy=#z)}%kFM5Z1v8)%k*msfigH+9 zus6m8dzzTI+!s4yb8Hw|Utw4DIItJvrj(eiE3#MXAs$*d`*FQIa#<`tOQk?FMj6~Q zY=yhV743B^F-8UwOp5wxL~6(dA0J7VG#RjawV$;}LGyA$ahyEw9e5CRMCdECdfMSL zWZI!u8n1Slu{@6X%Ks6gO{HTC*gjlxz*LwM-U_#MCVUk~lsXf@zJ)40=k3?=JJp;- zSQY$UONDQfyT`p?fW2Y1E^SP+_A0!v5*j`1Z~e(tDV#tdz{t-Ty5Mo-TB_-2@i`{- zWdHdRPfGje9TargXO;_hGJbhVdTjTLQy>6?xlKOfEqatk=(jkuZV5I^jlD|7$yOQ( z)zsK5nX7>zwi6FZj!5_HE&w zZ-U*P0X>^=atESgc5KAW$KW}JDj12B{!%#0%4eCBdqejPuzgy1Yq zbkAZ@tY+&n$1)?iBNty`_YJ$tln*%?NY7KgkdJki9?|bNmB)SE>7NdioprGW-wXI$ zQmXB&2Pr+h2evXXVaI3-D_)d(Pmghgb0LrRslk@VD11$*+926k=W0hvlh^u9(#KCZ zQi{0($$v4$|yf&_o$7i zeGs#!if+p=g&*<-<2w-4&6l;mN>{4qUXm5(c9b8#Ai+N8+Mm`!Y>^>4KWyCP=MhQf~EuC)T#wbpK2PgXY{#RC}>BjW@ZR9pA{BWh5TX6Zj~!rx)T<<%bHq` zj@I&^G_MXlUZ8#>VdrSwo&}FT!R2Qm4b-fp?diW+JXNEj()(BXNb*dUTWMbgAxYH- zGTjQTzRG;H`LdDfRVE&o8+HXeQmVEf4gvB!x7|x|^B0(XOF_h#+r&y7q`?;(h$V<# zt2Vw5V&iY4Sn_7{{w}a}m~nniZZ&w&a;|jyTxRPD0`zemV@qyygH{p<7L=`Bocx&S z^l%_+$MlGA2i7lwMSlVx-oUt4iEL~ppx^p}CtEHu{Z}B9 zF(LkPnsTOr^~Wf7_yuDK-0QoXXjTkoG*}ElcC}8{UjRqiRFijnh58lFE3Qw90x^$# z|1lWDQ1jITy(P%#5v${kNzxmIuC%K?rbW0DYYkRmEX=W?Nk_0hJ1w1;nn|ac8htY145F-r%r`2L{EX9^3M9tmI zVjnTW{(%EbNoS(=J~4!&gz$*crSYuoDvl8H4Pur$=<7}mvD#V)S4a$n%vwf01ovrz zQ?{~&09Th_LQ`|lS6sjoTNhybO~NE2p`#x7lHF`#cpV4hYK_gDPFxv1bbxP4r<=nj z+;7+pfOO|SQ;wk6)B6Ij4le~oAExB*%%%HZ4phB`yQop19s@E!&&UO@^(LXxq&OaC zxt!`Q%|@=l`T6#TMP9y_U6z0&JG6En&oOh;>Jt+j0_utDN9mxea6}qt%_} zrT}zDG%v_g%Pb^Rx0R>dFOOt-1L-q%CUL7JN24BD-g#CyeBf1CVH23U~=xJa&Gz( z$){K12+~$hfsDfv^1K}(;s}^T#aBk?#}htcP#I!s4(7EEmv&p4+PI86{zjae0A0QY z(Zzx&*ese`eSZV9IY(4-G!|Gs9$;ManU}W~@C|i@p{f|tW`Vlygrc`s)ljih`pS)Y%?cBISTIjPr7ycF)TWfqW|^Dc?q%c2|S_A zb={as4XvuJ)c?~wjAD!HO@8LFzDd63Xca=RUPDjPNe9TD&eyOWH@T6TxO_FXaRORe=8@ z_b3_EEW|8x0~5Q>naDZ(Kul|H(@edbWV-g84ADJXkUluU zsSeIT7s}fT%FM+P@9z_G_chHqoTjjn^w8c}la#PI>-LSpXgQ*uo-(GP3f}%Z{6@d) zy6Iz!%S%Q>h909~FO4X7#lq0%1~?ug@A}8KnT5v3aBUn(&$BF*1Q^?84*?i$p$lL5Zq;|xW1Xga7E)VrLl8aDUAM{l;3~NT*X6O5y0F*` zlK162c-R0Q!P8EvJs*W~AIlN1THiYta%;srLpjm+8Tz8MPD%qchT*=oAxS1M7(f!A zk&ot01sacCDTtIhbyF-5Brkdr1Ub|Ify%b>$au+myiN7yx%+~g@)H{wdWa3CGmw?4 z-H?c%#rc0XiBR!|bSD2-s|=Y9934>PrXyNkWncS1ki(YyCR%SOQ|S*e+X*>+5W@bu z9+m}z=vw|&jy|}Nar$Q&bgy8rp8&6`UFb6W2wAY&0fO5&S0GVu-z!-CgSq$;7io4~ zeC!57Kv`FCG@ijDn>+R|1^vFkA0L%U-0U}`f6J}e6@DZQEj|`K?j@i+sKh8k2@tCU z-)KLv&j$bOo%WNqij8xwxX8aVdBzg;c_#%qZ5_VCd}2$Ny9E_yI0C!CMMyq!S-k$V zu~>bYjh`?l8o7Zpe-9Fh4TiWR*W>f;1W>j5kz2C_%^r5ja{f?9^Nb6&M3UZ_idT}i zIjM{3#xfgWPRts{$(t*yA64OBM(>7~^GA1Gn?chY`w%#_aXR_I zAW#mq4qGBiG0KsuUQzmyd1Cb&gcuXkT!i;ZhiHB2?}D6_*}MK{(1 z`TZ#{?hp#0N%`zKfTZFq|NaS)H`z?LShZcV(_M36?OD@Mjx43x1}xzNAhm|HsXSoD z6yekR)`GSGLu)E;Qi#E&3NzmFmTM=+=~Bw4*TY}etojlmE0}!9k3~JcqY$ZCvDpuA zU;jd&ven?TTaKWe9>lyzE;27ILX79qF3X|5g{7sEN=uACW$tD zzse~Q6=I;L`er7-_!D~0-wsu5LU+R`W?M3>2jgT66Yr(H=or0tnAMX~bKZg-`Xgu2 z|4aH`Hg(Yb8}w|>vZv$Lx*PoEDJpj&Zoc_>beZg>bIey%=yAB9f#sS6^Tof?5x6;LeZwdr{m4SUf z!LYTgPsU1;ij#3RBno&i0Qj}27F&#I~_+CBO$|69IV(V0L`p*67SPpZ7 zN;^um^fka7Ojv+9&dz(D9iHqz#6c$15E3I?aGe0*rFs#-Me^C>F8QcrY;IQGtRiLr zBf-Rfd__O3c?=T%H~^xPwWQpQ>jGltBeeb0S_#!+cq2o>R{%!k87oB6U#LcER?W{6 zroC2w{BY$P%(n}aKY%X5e@0j_44wMzEIfISsV_-J`SZ$HdBY|jrG@k%Q>@tUc=+FB;fAs#}|7y!r)Sn(`{{`R>G3(e?kH@(@jT?f+S=h=UlZ$HPpWZ7JAzcu-$j(xupb0qUqqD5N&rJw_95hN4d#f3LXQcRKsT?vY<>7y zYAbb1b?YHc#e__to)Eo6IVxSUepFudWq@*&Ct|bma57`Wz9B!kLH&^=a!YIz{qE9| zmQxaF=6HbAvpH4Xdf?SqGw?L0=q9Q_TfSV1$c80 z0?IIqee`e7P=hzj=L^M1-7u;8^G)oj4@}IiHJ2plJV8DJl*Z1Y z0H#GdPqn9aCdib3q5wRCo9412fvMa^{|0R1WzvWVm+O0CWmRoW5aN>^!k1ZTNHuhthoJds6TXFa0wwC~wj)qt7wvzB4+!j*WU}R8;x0b6{>Dp$G%~A=lAlS(Yth-md3THR z@^{Wdlu9P8%Ah?DJKe-X`j1z6Ni`V|LQ&>JKE0#exv57J1JJHN2%1>$#KgzS*M7D&Q=?5wut<2b)y)~{W z4}jR|u6<>rJPbKwN(a9SKnPohr(v2qGn$9g;MPxAZB9#v-!JxmUsd@tOtmO98kjr2SD5CXzz>DD(k1G3>3`BzbmACS3T_p7iE9fL`dg##_(04S z0WY@4N{5DhZf9s6<)LHrquqp=uWXpFufTLA*||qRT>5!V$m!xA7jT*%TPyLzD~EJ8 zzt_I%vplBc>X>KIM=D`))h3s#)a_fl+P-#u?nD6?3UkS2N6`LwnrItMB?`4V2G`^* z7>^sPhSeG81wd40x7P(RF}9VeS`zi5F?1sVo*kQP3e8&TAaHGsAQ4N4s z0ie-!F#+DnyjAAW%8L>zQ+}N5(P-{jnBBG#n4XD3Jm5l*;@&REY2Tx%)pyoVDewL5 zgpD#)R%ej;hpgGGoz=LrGZo~sW0o)O5b_7QnjAHufe!;AW&kCtn^Y6Km8cv?dsK$m z(SYgQN7wp-G34oln1Du@h4DA&ga?ITzD;b35%C~Ib4z$MT2+pf4%Dk`Bl|J_#HP#k zbl*R0oovlPNfe~8!1b@322-+eJmC`D@1zD*1q6B=6{KG{N-Dgf~mAZY3n3T~O( zWDBb>`|6o&U5R?nEs_nujV;uzqt7|qZXo8$th})k3BRNgwKZF;Gp&J}p4<>L`gD&> zq%MUwu~OZk6cduvs2s=C89?W>GmDQXt%U-CG=FLSW39cRo%_ulf>|4f1H6N(Kh(K6 zhvv}>i1;90&s3@M;f29gw%1+!f*Bci1kZJyh^M#b%rEO*%po)p z@iaaYgfyboKWwg#h;U^Ts_=D!r&=6?hL2~VwO~+Tx=i$>FcU=A;`!!^LNZJQBOeR5 z6HC*SXuI8n6`Ve|8x*90wi6}i2@84s*IjY0JB%;BOuA6j_aLkzD_nOr+~Bu})P=lU zZJvzSwZ0g^|58RJ}E`VX83NUa}rEOjyChv=t{lof z+bF;r=p5>2Iucy9goMC&O8=j<$EMJ(LEn|Az_%17m&UpievT$NGGU}-N*sP*BnlOO> z{8T*eY3HH2J;2zBYr9J)@maI}0}kSduU=wi9%zGjDSF^+^cpTGFVy z$MQ%l*b2s*^TC0vJ2xRE{6to`D_1(4E?U>9%XjS?Y%Mswog!;*q@#eP&~MoA;27FY zB3wUe>M0!*vF8z;9A%?I$ZAGNiCVITunka$@46dIkqTkvOi1VmIr>`=_8I!q38rv& zV_6gWJN7vtp~+3G*;Z{jbgyJYxR^j-K<#*xerCAm-qcMO&OiiXq(nQW#Vcm+z{k;*N&&IeKK*4fY|(=)VH$Ju>! z`7hjX;+Szn393>Pl!cjE({XSUlt|qyx1p#`^TsA%QU`^1`}K3f=En%z!p)!ix0Z7F z+Obn4HN+ad@CPSer64Nl82Tc_MSq>urLimU{VRqaaIOpofj6JKedUmygvz)d2fejX zF(1v#1zXX@Zx}lAwZq>~>Qa#mkS}N5 z#7DE_d!0uv%Xw%mr-&TIU3yM^G895Aj04j3L!CPF@Ds#0#Fl`MgGlpR(9Yec^7o1! z&+y@62waNqYA>K<(aDF5_F2CT=nS|~n`G_B#0?y@eJy^!5PeubjGrpgWx0opt~~?J zmi286z(%`0T9|Un8eQQiqWZZO?e9wU!}(2dL`syR>b{9KLBwO}ObLgxbl$_WJrgxlyE)dc-$W4czgyEMzwDDcNo*gPcr#YtHf;!@>72|WE| zbq37IBe-(6G|4ce^4#uJ*~Fx)-aKQ_NvJ3nwd03jD6aP@FQCl_ZK)P!=NwA>Sli|w z?h>VNdlQ56_>AF%wK(DMATp;s@b?Xm`E7}4a+9pXv6b8>;MLp!}meK;*(2UrS z+#j#{@ErxA`5WmszhJ^WN71_3+au{UifgCniDctZD|!$h5029HZyw7AxeKdB%Qrwi z&m_XjXll9Y&wfW9(5MiyMd2a28u{oZ`gwjwfQB5TjI+A1CP;9avp8qQPPA@D4{kG= z9%mpmV%n5q2CbPjv!Bm_mZ3WI$NPfc_n+UE>Qjpb#X2oRXvz^K!!3>?pvF0|sC9sY zDXf(gBfWj*o0{=GC8F$s@E9&w*CLtN&=nipNtr=BVrnWH5 zjnW#}TQ=7-pMLJQMY%|nY>82wKcsB(zOR9}iFw0Tw9AGG0-942_$ARMnS!|d7Urey zrj8BX)Z-MJy{QUGvxP}b^vtCtO{cEcIiA&lYu+ZKI~0v#QukLoNWDdTUknoEGjPR| ziTg;_S%8f?PNV$sCbDhB|Pr;}X^` z?1Jd#Dp0~CQjNFQ$j1N;0}v2s*Y1WWbkl7?s1O6+C%~J>Lrjiy5U^omRY1@l5`bJ^om#R^tKEQ{{^7-Uo_pu?cy5Dry zuXu)ULmC`*0!UKSerLDf$`&E-mE#mMS&Tx`e&NByFR+!cSEas<^Ti(w-=FWYQc0h9 z8XUMU)U;^D=}$z8lHkdH0bW4z1q^$pB9JR+AIv|8%%A#_n9xGbYUU%16J>?e7 z`=7jk7wQ7UbOn29&s=~)h^j*>@uCNJWFrIZ_xX_<3OH<50)g)u@F(YT2vU-Dnt-Oe z^3u(^G1Xu2Ecvd8q*_3&JB8B@2s=_VmfVg)I*s&Um-s|UZ|T!oa*l!~gIGz(w0l6) z@{g9uuiFlYkR%#6p5-n4sS!JAD_*D)nbe%x_{v?BN z01BxK%X8p#B-FYRGeJ}ZO6y;ArtG8FcFv`g5zEK;ie|TT^dNGp^57@N@J?WpE{v{V zMlu^(^eWe}d=r9uLYTqb-{n%fIMGr=dXUfQjY40tZ`@$XOzo5{G1AV)sPywTa0=HPs~_EJ#0KCQ(NyH50iqw5jnQ^OUcR zzV|${^PF0yk;>bSkn-#YOZ`*WqfdqT-0J_-<$a2RZWY_u4S~+R|Cn$Akp(XDNH|f%FgV8&2E)9B5H%n3GQpcl{cjA{7+W0_fp6UUp5!S z5+s^}$jlTo0JZ4WafU}cdOUu!_(*8Tog+@rEnJzz!IptX4KU;(m((^U`}EJpwDKG; z1-Sd%-I{Ed!glS>ySr29{x=YFOduPK7;LWAdxp$;MMbCGnwzrwsNuhjcDGZMv_S=v2k?!8lBmNZDVTY*owDFHd%SY#v!4rG$@AT4F7g|CsO|? zC1N*nOXB{P0gd#Q2l!{5eW}&{FrBnECjEFAbxX;O^Z1&Q&~Ts3bcuon?&R@nedI#G zL`|N@iWA_bLp>tZa-}c)qmc{mkkidbnrZVTh>99(!Jq-I#|eklnJw13S3%*fKLJTa zUpmLJJA&CgQp6xQ46p+liTwVGw(BaYC(QmVgtdENK{k{`%vn_b0#V8xOy0#yz3~Cx zjm@#*3%Sehx0$q#Gk~CM0jz-i7M|N^8xk0ZbDtW)95@SuiU6bxfo>LTCNXN7Ee@SM zTM+AZS^{d~#`6Z|^~`)orViqB#Lg1M+sh&?)Ruw3hDzH*sd8x<8+>@iKl8Nj@+jI|HjLTu3&WGc|XB?ot@~*LoYf8?27PP|G;Zv|NsI_Bm+)EO&9(BOONMFc+E%8dyDfYrF-UpBw9Xw^YpBw zOzL_m2_25sItptCfv#>9m0avT!afzaY-dsdbJ^MRT%gbuSg5JKYH{(JSBt4@ zU@vTC_b?=McI}zs;)Kw^7+;#RbmZGI4+(FnUV(ZT>!T~ z8!L7PBp?FJ5ScUDX%5J64uIALx?~-RAt>O5UZC33-*>IID-JU=IvJ6lT|-WBvju2w-2e+P*vL6gYG0qw#i z>utNXA%8neu~ONe;q?TOcFl;bKILvK>`BscG3hoMbw(*t z-HIyNh*b5)eEGU#xQCzm|L%Vif0uh=@;&^W|7>|SL@D6%O~v3zFS^s7g@-vLMV8GB z%U&y~ikbR*;bRn(;hE~tk@qYPy;-@-u93zm&nruD{peyM;<{pRf4 zb8RcY5)e=YfsH5)Z|Q)^d|%HuB-yP4(K;cA0P+tkl@CN6(6U z9(vhpW*NECvjA);5RtG2Wh_>S02*661LaY3>$={zaL~5o3U!C+MC+qotYQGXnR=Kc zR&(kQB%bs^N1dG`0;>PXBWT@p{095!rPsrjsQl0HPzN>vY{y#2;AchVCz?SSW^D}< zV7{Wkgscqz{An49pZc_P4k>7iom+E>A;su4A-wCcD&CW^l$l55KTqNhf>5wy zmhHrXtiQ1&!BxA&>LE$%C~b%Dk4B@4(y7N;)<6?w(LG@7P zQ%u4uT5uUK*p?Y+TxcR{40ObcZl)dIS{niX*-#iXQeCGn$(tF%SDF(W=cCcYy&xMS zN#5I8bJ1~+n3SG&jZ)mK%Jo>bRSx#~$3{+iBK!nCa|h_dGTphOcKs#m&p)GKPSOc^ zdz2zkl=kp9m!2c}dZ?&*KuXmtxZ_rbN+jD9Dd+qVzprG%J?wY;x4WJ^Um=Q=O3mjZ zh-kPu&3zLECxajVll6E2vQq2(dFsGlrWo?>8>Hwt$@*)z@ODGk@-^&^pd_4Ec<$E7 zCK;12g+X}+2{ngtNJ&&cC*kzC`kcYz3GLfNI?9|*56wbr6~9R|>4r!&SqZ>ew>QliiiZR_`GQgk-@=ZQ{SPdlH;TXub9IcGj9LSl%Z5+27pO#{id|+0t;onhL~;T= ztY|o87x35OD{h?qgxKNNrsO}`#HzN5ZM@BH`S381K z&nMTE9YfK2I;ud-vQA1S*cB&1{MfjP2EiIhxO(B1kn&D;h4lu|hGd&}{c1_W#r@2h zhwM>8XeZDoT;i)UfeNseyw!ukbh@%vd*i1X! zSBAOB>;3Eaw)B1oaz4t*;a;OR&nh>4aB-gFOAtgbb z=%Y&E{T51{%TAymxuxf;n|L#j^j+ms_MkV5pKtWQ8H&dN$%qWnz9rd`E=7yx{F8MG z{*)&Vr8yt)+mMq1x_q;EwC?O1gfzmp3DFS| z*uR~7_#?5c+&>VcI9pzBK=sL@DlzS3gQ~9g%kQoZY4_t6SMwGHU`yMHrZKd`D20{G zA9wdLgHDP8p<~#!G^>g_w-FqsbS#i1CE)BtnpD#z>Q&v@$JSZYnuIHr=>6j(_DxK7 z$5KsWN64r0IO9wu7qRA`yx#*EUwIVf%UhKl^4*hwM0cpgLX>c)oekC_58I>4VCLK6 zBL=UHv+bv|blqJLb615PYMy?*63%5_w0Ko};;Kufj+`yjose_C_L#@kS7F+d>&28z z?8S3@H&-ep3UTFK$~L6$0AeZz&~-$GJ>&7Bp4_q<)mFN9wVrImA>u1_!C9lZg7ijZgMcQ=@6GC;QG{jLXz$2|3TwIz=3AklQT zAWnY(%?r^7emeI#>*3ew0RZh_)^zPLxp0F(^mDvbd1AMnAtZjvoeYBrM<6v*dtnrDD(!Hi;3WJ_9HlAa@Z!bln#vMv){CRJWjk8 zfEE8vNF?Y9qWXl`MWn?xf@RJ?ifm9)Oh{`@Nc+THXyYL^`So3>`CRROfVf{ z5~%FMef?f2F=!_>8m7Z+IQc+y;L@$Y`s3Mvp97fO<<98BB$jT-z43rFzI~zcn^K#^ z`zo2LqsMiU+c!u1T)ZF|fto0tWbSxpfDQCMRdSA;P#ZC8{|1D`zfXpLI|JY1mBg3P zAr&L@Fq9a6VmI<4Bz1=mxtSsv&6>)dZ*lzH^X?|aVPgBiSnBSj1VWnFAaYjw@ocAy zB-eQugfV4Nv-&{_nn6vbZnUtI$?p}fJ;qy)<Fu4vQn2e;`X z4V4auSZYefm1Uy|=YD-gTd6+pZoqaY~ywW$K8*E0V^3c#>yA za-rjo`2hg&j$>1+1CyQDM_+JZH3+lY1Ql-(_aKq8MWgd6*m~YLUkP87{j}o|U zs%>Hk1Qg+0Z7%caC6Q#;)p_UdSwpc0DZWaQGo26#DEmQ|Qb`aC?RX2O>mI*pzZLux zsn0!_bG&BaJaBqwO&%{sR4Z{}t1UQfXTp2cUdmcMjt2>L z(D1lq!YE&kxePZLU;3*mQl+6T>{;l47t6kNAYx z;z#=9VusKwAg1jQwc5UTZ~TWjB&~^S&g^ih4J*- zQk4W(uKv+%ZdDB1mh77_X+5B0FQ@j8(i=%-f zwH-iaiPBQ;a>LdfI<|9dgX-d$bx@;pO#OR;*OUv4ci#t+suYZ%OMnnoeL>bX9TPWL z1CYHZCD~(Z6BZ@C-j&n1ufN}du?5h9+<>B~7n4E*{dZv@i7<0Wgx9-{xozs+93xP0 zy*T?Jx~)rJ+x&XRLNWQele&`BmNZ{MpHB%+O7|w)h8E5)o;`tXPdbza8bQ*V=}5xu zEK7yOkZ*op4+Ct3%Z3S?{&;MO%{5YW^%vYhN>6reM+&}ZZE3$busph-$l!an zF8*qyj!M~5W9#>E?u~)6Ck6W(5$;#>`?qnb*w&i!`0JhIf~vhhBG)*3ktl~|kaN=n zU_woACu#)qDOftrGY;$l<&PH&{vz-_;9#%KLL18l&+YT)EpO${bsH@)jUS&7}&T^v-pJ}$%B(V>3+3E-1qteWRU- z^VdWr4InN;Izw!4DtgC@RbA7=d};MR-ji9yzPGs^_1cP>+l2hyPDQKU!xK(>bQ3oJ zRMA%;EJPyIZfNscRz&n0+Ufbe*0}fk=lJA%q#3q?i4x#-7e0_ut^Gid(UEFa70yzT zjIf~v5cP16ka7v0)&ty)07LXFlF{=1l z`3KIEk6kR-hcc_RAJsai;v?ii#IeHOQ2=WFeoAe`L9fn56o{ECQ+=3TM4k5R(h!Rr zMGXtSO{nN(Xy-CE6Rd})G`?$aTC)aL&+Oy4Uj)*&Q5NyKbU$b~2o$WPcvGJ@tm@_b z`0S5X)9!dHXQ6=sn3LI2rM1+W3y%It<8KiK#yM)aNzFl0EwD{F^0-Y*!x8`Ace zfz@vzAL4X|egaX)&cvEyKbPB_*mT?OaNIry+e}BR`Y20XI>TxJR0(=!jceSkMDCT8 z@}E(0k1zF~(k@hw87L`8q=Uv;O&gwqS}yINsxRFsDx0^Zx-}0zk}(YUTYJ8EO7QQ?J$alHf+K{}{X)S9i4ms|&rjU5g5aL0&-e;O_T|h;Zj=VF<&6P}Y(O&}~ z(&+&NMh1^~A2xR=BvzYzlq-lF4Rhk$5V{33-!htGBWG5M z1ASbSZ_i#0;9YXa)nM(B#b;^R`71VZ^eX~Vr$3e7RPhMzgM)V8cigOp+;a-DIN~ap@EhBcv!U0B39~j)u|J|C)!uQ{XZDGc%0oix$DlI96}o){ zLX;GDbL-c6%@=M2+oluWdUJd3g#w&JE?4H-q*cEMwxrOulxbBe&h%GjcZBl`B$*qK zjxtd7A>s3+owK7O1;OqC7m{#~zhR~Q^SxTK^()}-2wiusfJF5trpiHG2tJcGWz5le zL|ETExx)CEQD>?S0YL;v!7j>Bry2(@o$awpI-+E2LX!G){KLC2w#jSGVl!A<`tcgs z#90+|T&ex{+XHr;dpi?a9%v-_79`o{922eEyd4t*MkfP{DgP!{c zhj-fI^+S7X77|b z%c1YFp)MqTx$%NG*CM5Ixy+i9BL(`~P^IGa{r+p2GLeob9}A(iiH}iTAJsMvd_C^u zmI&PEw-pd2U&45a1!z+2vbyvwcWz`gMSfOwhc`Zg2P8kBqO)wWdMLGR>9 zrNe3@srD2%pQC43T3RIWPr7O`53F9*;bQ2^W`#R8QH4!**)Qe_MaX-JXGfuPQbVYL zddHt&4_#S)zF1*igOmkgM5ky6(yfKOO#o^>P}`YO`7xJtXF^exw@6w?htyF&p?@yPrCk$ek9yK4f`*pdx2X*VH zNJ-yuiyv}0T2=JYX_pQc^pyvwBgY8R;3+$N-fNZUa2!iHeKco(V$?nn6347`-}w?> zMCpq(McclIo5-MS<09yF&FD#~yf~TkdUOzkG@6#mvz{n2y{KZ{)j^|<5!rAuD!F`vCukR7J`S)xeI>GHh#Y#Z6a*M8knY6#*)^T>np+}Ruq~rRMbl8F zimu%%Fj-*WeeWupTIjaz(n1J%D*X{A0ykHw!!AZvA}x{9_Y_-) z8lO2)kT}4?f2j=VPNPSgD*WU`TF}nav}X0Efs+J>xPf+SYMnF@FW@v82+Z_Vc}zQN=JD3)=MXekI~*$ zI=?}iN6w*Z*L)vJ)pxlDL$t{`5A82F zT}o#P{;&YP6}z0Cq3`3k8Wgl<0(+|HSAb+cM=q^i_Qd32Uy`>5pjKUe!zs^p*#i;_ zoLqyM{b+4-zNNqqYF(~4UNe1AZFM%{u|{ftK=9W;rh5W<#_8oAZv)wvofK0X!$dO8 zqVsZRMitlVM#*MYmP2(0R;J0RsqHOKvQs`RzA-V@fyRzV={>zR?|JNT>yqQ#(45NJ ztmG=Lpb6v+uw~`>KhTd53GeC@Ob?&#t=+qk5n@H2LX%a{>j#7=dDL1i@13^;>owP9 zodUN@04a7n@+8;hTgMbj-}e%xHQ>`YrX1^>(d-NXL1oB*#q{vo?U9~^x7|85RX~IF z{?4U6kTisa^7dpYi-tfd_{f9NAk1@+`6Eot$4tYBs2^c|~NNn+7U>V5)nxU^zLx^pirmbXX~^MP@Ol@}BnlrlR@-_mXAr5Y&7^ zjEE!S_YLz_Ez6q=O;Zuv!T6MTi z7qTzgf2sWQb+QaHe*mGwz)?^XBUQ}zybLxs^NSvIYK5DlE#BOwiCGGEqySkr$Po%%J%SLtD4ar_b8(j#TE*2w#ULyaCX< zr*BM};CKf?7G5lU>Tm801&NG=R|1L7&S9+CB*5*CL${ZRC+euS>?a{fOjxO3+=*Xk&5 zmKXL0{2W_0#Wj8qJH_b%pXsu8g<6?XI$DQ1pP20DZ{k}5JUD{e=)#*@kY zEUT{u?O|9-asQqd`{zXZ0>lbFAr*Vy( zAZN-qZL-rW9BaCpt&r|vJ$&^-iP)#%_e%1Q_eakrb8421GR#IzyT7TM`9MQz>QIAY zH~7@oL_Owp`3^Sg3HH(Ruo8mGif=e#glLx+9n#jn{ma503eFIj8&8-Zl5Vi?z{A3k ztA5CF8ZAcWCy6DrI@`CV$*1CRP4Hciv}`Nxr9b#g8s8W_VR*JmOGiq0gxBk&nxj5A zJK@aZje14DPp91M5C%*9kR*&O%|=(a_@6{xHN; zRqALX;{N#!9BfE?NDO76ostwO{`18@OmCP-r`R-kj}#Ar#b4n_3}yJDjb=Ci0(D>N-QiMb*&Dah z*wZIqXr*6vX+gYV@v@>aA{`rYyI}cl5h^KskrkRMRh3UZAWnerMM6D6qU}XsO@%TI zNS_Ibp-+bI+uW8d$WEtnW$sTl&UkZ}i`Orgh<9*BI-LcU5XozA!y#r)<`(na-@Us@ zX^a~-5!$2dgJAt@fRHA}f=eM}v%|&)rUbd`zGdcNl9$w{lFz^;aPhU1>t%~8WU>b% zH)C`CSsBOo8-J3)Bc(LbDrVAjlOaaKM^B?m>?r- z0hA%xwCnM?n6Al9jCZXaw@bZc43JlG+MTtV-&JvqY@_4i`z_WhDs+2u4cME5S^7xT zx-wP<+tTT$Qil{w7;dWa)0jDas&muuu|IO<9`4^Tt8%wW*GM(m!X^Z~1T&xaU~YT$ z=ySEY+Vl8#VRw6;FE^8L(#F1*a0Z<~HazyCLcis{B~k4!zeAYK8u+eFy(W}Geja4K z-*EXIUB%I_!(CRa%^%92`8YeNh=1C3w@MF2S2yCujFmcm1jQnw>fsYhYv~kr(-qOt zmJR4jcoprM0NW3ecAt8h`+ycAQ6C-&F-dV%Y;v2zudFs0PM-5$zygbmZF;+OFi%J&F|uOV=AZ(^5_LE2a^0su05 zo-xOacGWtZZa1*~)Dzo>g=LXzVb11o!KpLPbL2d`7MG(xN|SeQ_-irEXr~bC8JDw* z=K{|-CwvsRRb_N&Q_IK#hqCR7qJ^K%ab4BOQg)yEDczaLOY^6?Nv`+CBuhG&6=wBu zw(WogoF18a6gYPKzuEKoq54!+=v216r*7Z!My@>s0^B$VrzC$SVuQ*tN1>6|??Yb& z_PWUMsoXv=ciU6nE5Y+!9>HN!`i0ma(zz8A-P#w3OZKUSVLcCeDs+Oe*o$;uQak`Y zkXrkEKl_)--fX!9`AJO-=S?F8y-v#6lh1tZLvv-H;)~Z7Pn1sfew&xjtfq2_1i8bG z=G}hy`R7-{jG?cbl5}Ox;{1qPt_%FMJ|OZ*9kcvDWr=+WI~%+T3C)DwCdPLgb0SMa ze(!ZMh2XKG%9FN(j{`DaBU3P@LVpq0>mjRo#FV4hEVn(bAkeEcMCxNI?ei++Xz<6s2sQjRLIYZZv*{L1HSnDdHusc=(4Wh zUl0AH8~*Sg27ER9^ZJLu&lT_=`Zoh0T>iTLp9lXionN>9VLJc))_-hXKVtu${6FmP zuUo*({_FaO!G9g@uT%bq!GDeb{^xo9n)1Jx;D2gf|GRO2NgDp?{MyrBoAPf4zfSER z2LIwff6?HtS^UG`KQ*skQ~nnd{DY+?n{{ttuyuF3xUZ$#={fT{8G`d1tMpD`l- z)132*ZU4>S*USH5@QeEXVIa_(^!LvF_ig>}zxjVJ0sOs)|Ih^gfgXR|+6f8S_4ix< zVSj(!`VSH2FWUHrbN_Yg*USH5@Gs`|{|S-)zZ>^|yHWo~2m1e;jid2YC#~JHqvRb_ Q`FwrC%FeRn*yX7I3)m+Xj{pDw literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/fairh.png b/awesome/themes/themes/vt/layouts/fairh.png new file mode 100755 index 0000000000000000000000000000000000000000..b4e289d6e7dc711098035859923a4aa556350ca9 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHab;j= z1TsG~WlRJ~mjw9*GdMiEkp|)S$Ssku=CXLI5gE>Fl<{iyR+DaxtN(b;^Tv) c2W7?#Q5UwKdX~4(6sU*6)78&qol`;+0FA~n^#A|> literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/fairhw.png b/awesome/themes/themes/vt/layouts/fairhw.png new file mode 100755 index 0000000000000000000000000000000000000000..514d66d06c89d5cefa080d0ae23e091b308361f4 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaozqx z_5c6>x^ekTAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;;N%h$koqs*BnK4I@N{tu(Kw&{gP)aWMh`nr4Ua=p?FGZOMYB7LZJ3LhnIk?v eNP19a%n)^9`>AJn`%Hm)7(8A5T-G@yGywqorZr#y literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/fairv.png b/awesome/themes/themes/vt/layouts/fairv.png new file mode 100755 index 0000000000000000000000000000000000000000..e5aad70fd0dee93bf5987c968eaec04632271909 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaorvf z0AwZ}6I=z7E(!7rW^j0RBMrn!@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nxdx@v7 zEBg&jE-?Y~T?g)E1BLWGT^vI+&L{uiXXTmE!_HH~!^6t+rg=JJ*>m>9a_fNv3TdP%DF{tDnm{r-UW|=^-*L literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/fairvw.png b/awesome/themes/themes/vt/layouts/fairvw.png new file mode 100755 index 0000000000000000000000000000000000000000..f97ce56b2b1554834e7e5cf7bdc3ef9ed2553a62 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaow&_ z|NsC0gx?wRAnB4IzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?7=#%aX3dcR3bL1Y z`ns~;;N%h$(7JhS()vn!|{*$swq}RtpZ-lgPfKLZFPvMiv1F zG@`+l@rK8%|(~rp)>ulg6X0sQUMQ-X`S9%#{HpkGtcC7J;u8tnPqQ;K1|{&c*Hls>~j6` z>4iq`PCs-BGI_8sqrrX3!s)E7KZ%W&#v)(2-b=*N;o4M hJGp*tUnjrJ2TskWA0%rfHcEg3+0)g}Wt~$(696K5rDOmA literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/floatingw.png b/awesome/themes/themes/vt/layouts/floatingw.png new file mode 100755 index 0000000000000000000000000000000000000000..7ddf7ae8eab1f27c55cd9cde9f0e4037de5aefb9 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;)m42-s(E{-7? z_ugLHn9iIiar|Sukdf?6FOH?bnhS$DBR{jZ6a`1}~eib;_l$ z%lwuGbEuYB_2svRT$*sKy8Qf8sd@Kz?^%ES^>@j*^7SXCZ8+Y+SjMpAK_UaQ!~q62 zg9b*P1SDodJ=2fs)inoZG;|v=_+Inmuzb`q!O&LkJL88R3C7C%!an~_Vmxm0a-;Ry zMGU<23Orr*ayYb_FaM>wa1rl{!sjvk1*^F~{PYRsKR>G>?^IDkgz$%XoCT}cPt0QN zx71JeYY1vtl5=1|PJ{cD$2EKYx=vK$_$t$|lg**xB#*=^hI1XV+~(`wG_~@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIx8iID}*wH06u3fIpTc#qhuI*O`Sg$f|M@@m kI6g|#GAwXYedof&@Gf+rSGq>{ZJ=HTPgg&ebxsLQ01GuXdH?_b literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/fullscreenw.png b/awesome/themes/themes/vt/layouts/fullscreenw.png new file mode 100755 index 0000000000000000000000000000000000000000..2c3cfad9c7d6bb3855d7ad9c743c217fa1814530 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaRt)< z|NmclbN*eBbV-n3FoVOh8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-Jcq zUDh($ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/magnifier.png b/awesome/themes/themes/vt/layouts/magnifier.png new file mode 100755 index 0000000000000000000000000000000000000000..14765551c75feaa2fe8600ab10667900a10a9b94 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIxA1ctxd|Qym|v0ENswT^vI+&L{uiXXTmE!_LEVhL?xuO>_T2zM}igZ+O@g7R+J% sVkgkx%skgoSNp@yqzSAR?_8J|1Z-DvKR)ew5oiR1r>mdKI;Vst0DW{g4FCWD literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/magnifierw.png b/awesome/themes/themes/vt/layouts/magnifierw.png new file mode 100755 index 0000000000000000000000000000000000000000..97c1d11217423cf68d4642b1535fbefb7f187708 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHaRt)< z|NmclbN*eBbV-n3FoVOh8)+a;lDE4HLkFv@2av;A;1OBOz`!jG!i)^F=12eq*-Jcq zUDzopr0DCSvSO5S3 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/max.png b/awesome/themes/themes/vt/layouts/max.png new file mode 100755 index 0000000000000000000000000000000000000000..4246d56c71bf5fa103d0c038194871be572b4309 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSoB=)|u0R?HrcbYLZ8bj%WHFWm z`2{mLJiCzw;v{*yyD+73*Q5YB7d>4ZLo9lyPT44UM1hCJpHVf&eu{&_ul%RXDi>Zf z{V#v;@y(2_4(iFK;ti!cT`4|?0##TZY6!7EtPqM; zknuNC<2XK9fc=9epGW6f22Dw02d@s6JzWg$Nw1rfB|kS6E6XJ;oR>eplrd+i<$>D{ zOpoj;LS(2IoTr(2EM78o?@b|g z&K{Rl?S4s`2d8Fy|8TnE1jEUWuZmL)uR8wwo&JGQWO;~S{OPR6K+iFFy85}Sb4q9e E0Q-1zcmMzZ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/maxw.png b/awesome/themes/themes/vt/layouts/maxw.png new file mode 100755 index 0000000000000000000000000000000000000000..14c161a6e35de4e710fb8de3467b75e6c185c342 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRu?6^qxB}__|Nk$&IsYz@#aI&L z7tG-B>_!@hljQC0!qCAg>jC7P@N{tu(U@3zNipxJ15e9CeJ+F3oJwD%68B!(bZJAJ z_L}P-f)6GiWt|!|VGrZlT`#6z+bwtg#`n@ct^N;AUgtb-=T}i^|L|RH`^&R$8-9kG zhrDF;e#v|7l6KBgafzkeyT0r(mR-8Mxl(_v=2Bj1^^-Wwdb{f2uGkGd+^h6w^xvPbTI6}9olm#>Ewu3HVF>yH3sBsY80av^ zRI9<6LHP&=w-4(hHa0e0E6xLN)EyHVV!DDG<~YdtE?>d)Vxn(NA_K$Q)sm-gi<^NQ Oz~JfX=d#Wzp$Pz0pD-%` literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/tilebottom.png b/awesome/themes/themes/vt/layouts/tilebottom.png new file mode 100755 index 0000000000000000000000000000000000000000..aeedbe23034788bf0502779da1764a7ebd518eea GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHah*QB z9?1M!cjX^Qx+KUin8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)8VMc~ob0mO*>?NMQ zuIx7$`MG#m=f7kU019b(x;TbtoKOD2&&o5Shn`sf4Mu)0K7pH(TP;B90(?STf%JbcD6UwV4CFAC1o;IsFqBO` z3sSJG28|7OqncwH=G-yxm}6&fkDcL?nyl4Tl{izNDGZ*jelF{r5}E)9bvUX3 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/tileleft.png b/awesome/themes/themes/vt/layouts/tileleft.png new file mode 100755 index 0000000000000000000000000000000000000000..ab55e087479efb9254f0efabc7720acc3a4eb123 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-u0Z<#|NlU8`tEwu3HVF>yH9Wk$(OgHkB@Q@b zhcNguhy|%|tVu{nU@AJq=D{Gh{RlVDmdhtOo?I;H(rPgF>D1?8*cqnwWxuBCLZDd; Mp00i_>zopr0Gs+QHvj+t literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/tileleftw.png b/awesome/themes/themes/vt/layouts/tileleftw.png new file mode 100755 index 0000000000000000000000000000000000000000..c18e7b43fc1df32d0a58bd71e81e9973e5bf1cfb GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;*FUb3f)V@Srm zw>KAZF(~k`9{Bs;KU;9J#tVldvk!jY5f?M-DcZ@j;QnJ{|7f{rR*)$`Fu_8QQH4RQ z-_0|RAIP1@jRF%}28J29*~C-V}>VGHmHaRt&q zurz(=c_77D666=m;PC858ivL>4nJa0`PlBg3pY5H=O z_8W}+T)gJtcEJ;XLYkf~jv*T7lYj8D^33RA=c(c0VdZ)AC4omMUEsMK+cP${4UZ-s dIv^{>P_SynnunQ7a)6o`JYD@<);T3K0RSpqFw+14 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/tiletopw.png b/awesome/themes/themes/vt/layouts/tiletopw.png new file mode 100755 index 0000000000000000000000000000000000000000..daf965faaaaddca59ffeca4ba2a98c1b1951c95e GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSjKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sf4Mu)00UpW7Yb!wN0(?STf%JbcD6UwV4CFAC1o;IsFqBO` zYXRgjCV9KNFm$lWdH^|=o-U3d7QM+4t!xq;+-rDPn?!jW7O*B|@}@REd|zuYkyWij uKtb8&fSHj&fvH2r+Q3FdZHKBi%nXb7ih8`2d0_)Igu&C*&t;ucLK6VF)i@9U literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/layouts/tilew.png b/awesome/themes/themes/vt/layouts/tilew.png new file mode 100755 index 0000000000000000000000000000000000000000..c722a358e0618163bbe1a936093d327ce2594d8c GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877Y2q^y~;*FUZSUqV@Srm zw>J-RF$nN5T=@InKX}q?*?{7T;(~}TT&6DCeGD`12ClIz(>>1&G6V>0n5TrhFeJNv z|5;-KG~CAW6oZ)}kYVWH`(mLGM9l+!ho?`kJpUS6QgnQ=h}(~E0w8fuS3j3^P6P000>X1^@s6#OZ}&00004b3#c}2nYxW zd2z8Hj+`L9UQg2LG>t}MEh2;Ea(U|nQA(kdBAd<9YPAv(`2en+Ap7$9 zJe^KwE+TKhr4wXdu~;OEA~PC|UVw8a$i8y9{L}CE<2a6=fKw-kQVQSqsaC6BA~H^r zQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K5~rW#b#FTbqDFk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwVxBIJAr_~TfA}*P^a!vnP7vu~;$dKz X$MK&rzAi=usDi=M)z4*}Q$iB}5zjAs literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/taglist/squarew.png b/awesome/themes/themes/vt/taglist/squarew.png new file mode 100755 index 0000000000000000000000000000000000000000..913f2ca6ba168e824644509d6fed72b31c677d49 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!3HGtKUiJ>QjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K5~rW$n|Rx>tZgk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwGM+AuAr_~TfA}*PG;qo!WN03EeKyd5 d%Z(A}pyPS@6O*PM?E$J|@O1TaS?83{1OQ#WGiU$+ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/tasklist/floating.png b/awesome/themes/themes/vt/tasklist/floating.png new file mode 100755 index 0000000000000000000000000000000000000000..f29e7f5a9a88b2792344da49b01b69d947002ee4 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RTTHmlEFw9?wpokYtH#M2T~LZfo z*92^Mer#4?rRwc>IUX9fi*!GyTvy>Vwu-CSxnbQ4_sH9e1***6{uVjZJgtzqwEbP{ z1#zbxr3qo@=FB_OE^se(Ug(o6F_z`8Zp;pMKR4&aEHeW&Q`OMRMJux-udd=;DY*Yl k#Fiy5<3D>`d0N99QfGYPmE_VDKtC{ey85}Sb4q9e0NKlaX8-^I literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/tasklist/floatingw.png b/awesome/themes/themes/vt/tasklist/floatingw.png new file mode 100755 index 0000000000000000000000000000000000000000..eb802aeebfd3632131a4f00e3fa2e934d5306c54 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!2%@3w~L7bDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RTTHmmFv8?4?(MLXst}5hc#~xw)x%B@E6*sfi`2DGKG8 zB^e6tp1uL$jeH=JnUcKST^JZv^(q?yd22mg977}|OAi`qw=goWJ@_t>60~WSh}hwi zS^Mh`6inP?AhB+<=k`r^7wiyimQOU5I6w_xk2}(ah#ma(7lPOE}mUT5V=(TeUgS_w=T=nLS0%9K4nPZ(N%cW2?IV X(dwl}PXAwnyusk<>gTe~DWM4fUetK} literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/theme.lua b/awesome/themes/themes/vt/theme.lua new file mode 100755 index 0000000..90fdc26 --- /dev/null +++ b/awesome/themes/themes/vt/theme.lua @@ -0,0 +1,98 @@ +--------------------------- +-- Default awesome theme -- +--------------------------- + +theme = {} + +theme.font = "sans 8" + +theme.bg_normal = "#174800" +theme.bg_focus = "#333333" +theme.bg_urgent = "#ff0000" +theme.bg_minimize = "#444444" + +theme.fg_normal = "#aaaaaa" +theme.fg_focus = "#ffffff" +theme.fg_urgent = "#ffffff" +theme.fg_minimize = "#ffffff" + +theme.border_width = "1" +theme.border_normal = "#000000" +theme.border_focus = "#535d6c" +theme.border_marked = "#91231c" + +-- There are another variables sets +-- overriding the default one when +-- defined, the sets are: +-- [taglist|tasklist]_[bg|fg]_[focus|urgent] +-- titlebar_[bg|fg]_[normal|focus] +-- Example: +--taglist_bg_focus = #ff0000 + +-- Display the taglist squares +theme.taglist_squares_sel = "/usr/share/awesome/themes/default/taglist/squarefw.png" +theme.taglist_squares_unsel = "/usr/share/awesome/themes/default/taglist/squarew.png" + +theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png" + +-- Variables set for theming menu +-- menu_[bg|fg]_[normal|focus] +-- menu_[border_color|border_width] +theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png" +theme.menu_height = "15" +theme.menu_width = "100" + +-- You can add as many variables as +-- you wish and access them by using +-- beautiful.variable in your rc.lua +--bg_widget = #cc0000 + +-- Define the image to load +theme.titlebar_close_button_normal = "/usr/share/awesome/themes/default/titlebar/close_normal.png" +theme.titlebar_close_button_focus = "/usr/share/awesome/themes/default/titlebar/close_focus.png" + +theme.titlebar_ontop_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = "/usr/share/awesome/themes/default/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = "/usr/share/awesome/themes/default/titlebar/ontop_focus_active.png" + +theme.titlebar_sticky_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = "/usr/share/awesome/themes/default/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = "/usr/share/awesome/themes/default/titlebar/sticky_focus_active.png" + +theme.titlebar_floating_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = "/usr/share/awesome/themes/default/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = "/usr/share/awesome/themes/default/titlebar/floating_focus_active.png" + +theme.titlebar_maximized_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = "/usr/share/awesome/themes/default/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = "/usr/share/awesome/themes/default/titlebar/maximized_focus_active.png" + +-- You can use your own command to set your wallpaper +theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" } + +-- You can use your own layout icons like this: +theme.layout_fairh = "/usr/share/awesome/themes/default/layouts/fairhw.png" +theme.layout_fairv = "/usr/share/awesome/themes/default/layouts/fairvw.png" +theme.layout_floating = "/usr/share/awesome/themes/default/layouts/floatingw.png" +theme.layout_magnifier = "/usr/share/awesome/themes/default/layouts/magnifierw.png" +theme.layout_max = "/usr/share/awesome/themes/default/layouts/maxw.png" +theme.layout_fullscreen = "/usr/share/awesome/themes/default/layouts/fullscreenw.png" +theme.layout_tilebottom = "/usr/share/awesome/themes/default/layouts/tilebottomw.png" +theme.layout_tileleft = "/usr/share/awesome/themes/default/layouts/tileleftw.png" +theme.layout_tile = "/usr/share/awesome/themes/default/layouts/tilew.png" +theme.layout_tiletop = "/usr/share/awesome/themes/default/layouts/tiletopw.png" + +theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png" + +theme.xmms2_play_icon = "/home/tom/.config/awesome/themes/default/xmms2/play.png" +theme.xmms2_pause_icon = "/home/tom/.config/awesome/themes/default/xmms2/pause.png" +theme.xmms2_next_icon = "/home/tom/.config/awesome/themes/default/xmms2/next.png" +theme.xmms2_previous_icon = "/home/tom/.config/awesome/themes/default/xmms2/previous.png" +theme.xmms2_stop_icon = "/home/tom/.config/awesome/themes/default/xmms2/stop.png" + +return theme +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 diff --git a/awesome/themes/themes/vt/titlebar/close_focus.png b/awesome/themes/themes/vt/titlebar/close_focus.png new file mode 100755 index 0000000000000000000000000000000000000000..a5b795849aad35f26a0386aee245f2b49a8d675c GIT binary patch literal 666 zcmV;L0%iS)P)LrSVSRJ3Y*v{1S}*~AOunfA~uR$#KKgm zQl+x8(DP3cmMDrSh=>F?>U~BroV~U;8EJ0L@vbSw1Yjf3OOVfkWu}!y){gzJxEQ z#eB{u!$W9kq!T|cXRvfY{Kb7`_y#x%)rA>oaTaR-cz1FUa4l#u$Ueu$XDZ{suI0-FQ!V`dmLv%rpv(fj6W70W>-Ia=N+M0K*(bI_%5$#+MB5>)f^PaeAU5D)RPfk|o5sPUgnyAW`W&{YCVcs+y=k>&YSNc?5!UxQ(v}~eF>lY=8oj4VFLpX#x07ORE!{{KIIz0%SU-l5rj!jz}r#iLmgbK_5Hl-DuV$gdKulb8Ga_VfJ< z9ABJY$6jP%e$%JA-|F|J&|v;|P6AG*56*wo=im{Z?B~Bln`eV@Q#MQO|C=jLojL1Z z%3$A;bwm6uCv(nyuMg_peX~y7$#gn@PW#RO4y#3_7FXB$XSX&TFj@FRu%(Hiu>avk z>sYgGA<2Fpl|S%Crfz%?;l;8yuT)NHxA?7yznedErHeC$@cwYJW9{Z*eNlSr<1(3Y z=hv-52?sZZ*s-!ODNb4Uz=4DDy{+u6wenmQYyyt@S|M=_+71g?-b{Rut-_piU8$69 z<_dGerxJVqPS_CQ%$U}=TqRR;lFd#t2OSoU=|Z0O?P}Gh2<~B4)Y*FdjS$DIqCKW9 zMhl)7YlbVmy!GenXU01cCAvZ1CjF_(7TCsnB8{tcLH7EP@GW&+p5`y2mfVY)^gKm- z>$+vU(pwYx_s!~hAd(sHd(Bt(@_)YFS2|n||C$U;iK->85hck*sfi`2x+y?{!N|bC zQWuDfj6)2~tc(n;OwF|o46FZhlH;S|zFm1M?6=11n=oD+5c223te1 zH$V-NARB`7(@M${i&7aJQ}UBi6+Ckj(^G>|6H_V+Po~-c6)||a`njxgN@xNAl7Ve| literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/floating_focus_active.png b/awesome/themes/themes/vt/titlebar/floating_focus_active.png new file mode 100755 index 0000000000000000000000000000000000000000..3447bb2e797aa7aaa0d801ca1177a1ea231a0484 GIT binary patch literal 598 zcmV-c0;&CpP)GY`6#5dKYoA>zk-ApQ@;_ZcF76#y~Z ziy$@-H-OZ**FFAUzWhHNmn{DEUnuz-NS_0y!J(hlGlYHl544~FZ)AWR5ccJ~YTnoX zp%eeZv0=r}|3LBimi)Ic!7 zWE1?#fFbC`f3UBh;Vz%||G#Y`0s|uvE(f&aKT!R9f(C;P4}6vYGF-j*|9|s3+*mvl zXhFb}_dxXqL>UY=-2XuWL%^f|iuwQl>sMf6;WVJ3e)rx3)fr%95Q2vL-bw&!{x6yJ zAMAP<=1v3}>T}~gP~HG*&LhfjpBq5K?|@whay>YFeQtoT1I{c>s^Q?Y4>2?WZ&^X2 k;q!4B3YH%&=xJ^+0CnFED5!2~q5uE@07*qoM6N<$f?snX`2YX_ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/floating_focus_inactive.png b/awesome/themes/themes/vt/titlebar/floating_focus_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..8d724bffe2b89abb89a58307c90e65e6795ca7ee GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkEPcOPuD`*OhUlwY77vUJXr4OLJrD>+AFS zT2;IK`s>{2?E7k-MMmF_BuY%162vYoE&X%rR?{X0iP>3uI0OhL!6)}0 z>i0~JZCST|{pv)CN4wr}=qR}a9{Kt6r|qjUxsDZ)L)z4*}Q$iB}PLo~j literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/floating_normal_active.png b/awesome/themes/themes/vt/titlebar/floating_normal_active.png new file mode 100755 index 0000000000000000000000000000000000000000..21a67eee58dc38fe59fefc56730ad5ceb1402341 GIT binary patch literal 799 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkEiN$WeaiCOU+1%UJ9Th9U*nM-)WD*?g4OBm zN0nWHhtGTxWjJg+v&ZlF7w6`5zonrnw^liSzQ~?iTyi(}NmlX_ori`0Mf~F>Yv%3C zd|()`U(T4HCEY2L_r;rC#%s#9+*gp`kh$?{v-sgXGP`mgessw>w#N40%m-82mXw&8 z?+vZpboNb>?z1c&hWgNH*M6wal6rmdoa^aH?QHIq_Jy^MIi_F28#>po^f;yL!0Pj% zmLbjc-zLrpD}PBa={af^{(ICTmGAjR#k#EVNrIsI@-N*rr=2W!R6ezvB*gl(S7VFc zyX#eI2J4zGOWG)Bi%T7{{&#e}<+W#AyEJ0F|H{2TtbMKVQ;bNyb>wsk)UF+5szy6b)~=#4#|2Cw)DG9%ijmgR`-&%S~v67tl0_0 zvN@|Sg-t&YC%5@SSM8!Ji8577TW_y@JZt5l>4rtp0h`KmlUe7y>0k|;U$C3kVo?~! zdiUd}m%mvW$fahXdgD~nb}J?Wg+24;GFoin;H)aO(SBMZy>!A|mSPqK)fc+6AMX#^ zKEGh@pC9@etqPw1>n9|$|7TD?{ZSk*1|tIlOI;u` zG7d2`vobQYGBwvWFt9Q(;CR>R0n?D1pOTqYiK@ZCJjBqz%GlD%z!IXt)==yXPy>Uf LtDnm{r-UW|R2@W2 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/floating_normal_inactive.png b/awesome/themes/themes/vt/titlebar/floating_normal_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..ab0f89c76a4f3c375891bc98e961d07805f5b6b3 GIT binary patch literal 814 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE~>&VHY4#~ySZ_{&l$Pd*Ee>RZL8b zK%1h&gk>+EFJ8R(aN&l^aszw&d~U^SpKbC>cgLEUnMK6K$#K5;T6OQ;yLVNKFGgI9 z+HY-dKRwxa-SyXU8?L@Bdwce*Z`RgZH`eCm=NA_gOvqdt|9jv3ze4lo&i&dV5Y5fa zUA8pn;P=`|DvSp<>D+p2=I!l$<@MKz5BBc0?d$J9|LgC+bG8+^xo5?k_Auo*FvT}a zR^U)+cwWhOfiY~>*=2io?Xu$8w{Krsef@l$(`8Kx7Q4Bnd)*$hK46qTY*4d)%BQJ8 zhu3N@HClRQduM0o`k+(K|JMDVnK|o7q0b~05m!f<;~Go--1OG#oL(mI$XCSm;QMoz zOYf%5d(JTbkU`A)t6AG#@3LpOyhMZReCge1%}>7xzXJLpYFcZe1cOE2;VW0J6r6qe zQZqG@X+o-GYGm56FJHby{CM@sD|B^eU%sb_cn*3#_6IZ?tv}>ERq+xA6rz2)C4m&CQ5*0QzJvPrYcrd zR(eXbNnY@tq{2{P!ZYD{Wr9ST&!m(NZ_Um{91n75E&I3O&OerYM}03(@md)cDB_{X zXtyM@s;K;K{NB9GS#nux`PrKf>Q=pX6#8F3LA`xH^MyqQH`X%Vi~*)M)e_f;lH{V) z#FA9q6d=K1WME*a3q(f7A%_YnDIDh0x1W|)H}iJ{J*W}9s;s3yy z=aCWy28QYB>BnZf#ZW_)I{9JRSB7y(L_aC?tU|w1sP(O62J6e|tFPc@!&%Jc-??o( z$_?EU7(}e+)pz$qDn+y^`mw1}s9Bw~uWx|v?ps(aU09pyXl?zOj;%?2p-ON@B<`N* z36Zk8s33kwj^~eeR%6dvgDr18HjN*H?=E5}CxM||s}N|}OoW{)@8a39u;l^V zT7Q~Dgv$%2(f?*Bz3XSOTcLZrp?T`1ig9dmMQBQlfcK-hlMzA9oM~Ko*oR@Q5AKW* z%=sJ0o$Od;i4;|@Q0UGlacz&~WVk<{M+f3cyC2eLsk&!kK9s|b$-q}PN$}peVyt?6 z9?slV9GE+U<1xXwGNWLdDpj#&w4s)QG_ocNn>L8PofzDbDn-`9g^ctXao)JX{>Ne|jC_ci#3;Jojwdg`7mGIP z-)U(}Su{S}_=>D*+a3r#M_{mq?#APMxkU@k>y#}P@`I*36mr_K@liD`%W!7KkRRaV z*^BdjTdk9#p2`K#yBGRTj^a35a9u6nyLEC}0g;~5SvD`nxg%cHJ#c)~v+7p^rv#dD(b_fYZhg%cI#svrX)2lUOA5d3n}cz! zn8u8t-qTF=)J|v;F1#rE?o%PSn`hEnDO@iW8s88uCQF%0@EBM-Vbrq>FNouuMocP3 jm7*Gr=u{%7`h)!&401`p9ZAH400000NkvXXu0mjfjHK)| literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/maximized_focus_inactive.png b/awesome/themes/themes/vt/titlebar/maximized_focus_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..e79dc1ea0f5d744f0912a146169d5a823c92cb67 GIT binary patch literal 1277 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmUzPnffIy#(^vlDyqr z82*9aYl$mOKoQOYkH}&m?E%JaC$sH9f@KAc=|CE69>blZFC!Qjm_K^DIEGl9UVG`h ze{iJ8fsgOA<1=-GRwqQv2vB1B=zhsgL5p#cm~Vszm-ewi*@Lk~6_gmld(v{mTGS;7&^Ca(_<g`uqEPyq zCMTETr0IIGT_vTZfiW>X#~&Zuq+>Mm%=v@9zP<;Y7Eahx_BQIttE;Pj)YyIcX~S^( z^y!@Z{MYt8@%w5lHCjBregEzr6&-!@Y0;C|J4=v7tENp;o&>(;M-&!+YLd5eHKJ3G7b#)zIA zv+m4UFLs?fcaG24*x082UyQg@$-b(uUeo{ahKi`hMMmC?jg39KGI;ris=Xqjq7%KA zu2`|+!1K?6At5b`G$h&%K6<3o>Eg6qM|<0b4GWm!>*FkB`mSHOQgVMsVY7om!~OT_ z0vro6rJg>0I%8R9YNU*H8P8#Zh=_;>Cnu{{=}qrmxoXur%XfcYv~r6-dVYTX`@HOI z<^=&73={m8M@B{}PCspEZr*)SSFLBRjiwK#kEcF(LbFcJc&7 zM@tvVEHA37tE&Ry^7_9*|TSN+|5&($T55NYz{@f7~kvDI~yAtK|WNT zq>^~s%zwV!(-#*PZ`r!_;rHL1txgPY-o2CC_4$8;yiLW0=U=P-%ScIewK*xawYOW= z{jr!kckYuS%aq7tg)&And2Z%>`~9H$`#awGcC}SIwr@9Ip~1B>qzmY_Q>RZG@-$c2 zoO|_3Ygy)`lPM9Akw499o}ZihqElG?mz9;(gw&Z&pQcJlNzIrw>(SfW+f{@(@0y(D zoPN6XvBjSH|MRBn$GoYu>alb*k3Jb`&yYiw&&l!H%TRv^8%yj5AGQfva+$i zeA-(_P^)Hw5nzVr>foh3sL`iZ{YGO&MZVHfKFfuT()CD3V;}AnLD8U}fi7AzZCsS>JiWody{an^LB{Ts5`ff(y literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/maximized_normal_active.png b/awesome/themes/themes/vt/titlebar/maximized_normal_active.png new file mode 100755 index 0000000000000000000000000000000000000000..7765759edef127c01675c0e073dbe43de436ff7a GIT binary patch literal 1208 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 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/ontop_normal_active.png b/awesome/themes/themes/vt/titlebar/ontop_normal_active.png new file mode 100755 index 0000000000000000000000000000000000000000..fc6089517060a44a12c8690b5ae56bab11b0130d GIT binary patch literal 965 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmT$6^TbY*8=%$N#5=* z4F5pzwZxSspa^GyM`SUO_5fqIli7A4!LkC!bRZ2jkKxYImk|sMOglYY978Nlubpz% zJ0wuzSpD_c*EjC5Dlsn5Sb6qFyRfTZtp`_X*dsL_WvPG3HsS2U2OQRHyL;qT{vwf$yv*LNC7+j?y=gSFng61#;ci~p#g4NZ zBeVRT8A@+l-oGjPZo~`C<=~^DU#&&F_3-*qgM`w0*_ zKBepPmC|20u3Ov~#;n@t!JM7D#O^=IetN1M$>#JNPor=2|a z(MStT>@vA!a7nVhxm{lV^t>?a&h>e^i!zZOc#TToj z4Hi0w@v{gxhy@)su;lXkoS|{J=i}~wi>I&nV43)RcG%fQt%q_Sjw+PK8-Hc+*I3qO zbmmXwz5JbbEe&}_m#?pCAs70+4LO;F*IJg~Ol(}dFvAu9h`nR2wm-LmFXaYwAN z=`GNBp&PEvA7=3^t6*Nj@3NK2*%mK!k4G4Hy;OE_+R74tSZM-_DfjwEACiQw9H098 z{Q-ZD=z`@lPt*&0cM5YcaywqSB2*L6v`FQh=8SIP+jlvBM};3tbW-z}yN*MwYg&L{ z-Li+JjGvgoHRZn7aP)jHn@}_J>5pjf<;l_}GZjR29rh?iG#f{^sCKHWp7-CcZTe-o z2eb0w+nv43EM?Xm{B&BU;B3#*LvcYWCU@S>(QI9J?dtj?ThmhRDJy=xrT;}db-S^R zv)E!uV2V~Pag8WRE=o--N!3jO5)4KL29~-&WMmv-Xl7+(Xk}`yZD3$!V8HRN6O<>w z8glbfGSeziH5izO7#dg^TUr@dLNwSKioF49kObKfoS#-wo>-L1;Fyx1l&avFo0y&& Yl$w}QS$Hzl2B?U^)78&qol`;+0Edc{S^xk5 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/ontop_normal_inactive.png b/awesome/themes/themes/vt/titlebar/ontop_normal_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..cb2dd7fec00192962b562e4edf1c48403a730dfc GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmT$6^TbY*8=%$N#5=* zKpF^sI`6IrQk(@Ik;OpT1B~5HX4`=T%L*LRfi&1WhC4@JMldiit9rUPhFF|lJLSB$ zvZu)L{kg}zq&U}|Tj&EpX0O zMP?_K(ht|Ad;&Ztlz8}*?pDvYtM8Re|;s*RFjDw4IKqlRZ^@U z{@xW`9<);Mu)&{csft3K2Ml=rKYH}&#O{M$EBiM_@C11Y2tN8~(edK(?gOV!pRS9& z-Y(qflCC?`$Ladlhd+N-{+}(k{Bq|0pi}-XXG-rX2s&~kaw-0q=<&p}Y29lHS=plx zA3l6vTwL5Iu*k_}LQq&|hqvZjAGOCBFH3$IGq5l*3JA8fwLSP+bx^_?=u8V4HbL9Q z>{)G_Hyg{y%O5V3x$?SnikGT~ruAla2fyoIXTE%yIb#{8A`3%F!rQXl*{i3e9^ACX zPrTQS+1lEAMTpjeInPZPBI4uwcdfG)?mup5X7=scP8&`or^Oc?%x1glO>Yj;ntuLy zea3&zYuBzVa_V?lVRO!DVZiwdReSrK7B=kNYwPE7|I^Pu{0tZ5xPw=QOz8O6aWv_S z$=UFQ>s~LqnX@QD=g_uXKbQF8oiSUBPxK$%mb+a|UEO||?c1jqose)|eYNT;-(drVr95S~s|DYDthkV4#`vfDX$ObheE!-zeCce!AOmm9w+`D(k+@o6J8c~v5l$uzQs+$5N7>o=IEOmj%$T-B%%*x2f%E(yTz`)ADKsHz& zm`foVa`RI%(<%vQaC($k3e+G8vLQG>t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU38N O5re0zpUXO@geCyDxyW_^ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/sticky_focus_active.png b/awesome/themes/themes/vt/titlebar/sticky_focus_active.png new file mode 100755 index 0000000000000000000000000000000000000000..1106399d777ad671051f94a7f15f0e1addfacb78 GIT binary patch literal 833 zcmV-H1HSx;P)f@kD}&@elCK z!KfEO!9>j-jI!Bv$U<28F;v)`0CQ>uJ@_$d*AA(M1^mW)? zd1K{LGiuak_oZ2Czx(am4@RGi2hYpZl*C(yj-5Mq;`}>SECz#}SvW2LD|3NE73nNb zu~>{0U^M|ZqDE6XnE`ix*Fh6DO6R5*=;7*|7VYp$uRC zaq<4faD8V&QJ@3@z(Zv#_(H$kJ@L`Ihu>SY-ePlu^%mz{QNAU!>7LtQFkIWY#(KQo zk!9&f2%QbC{7(b)9fEzLVHTsh)!^^CV*N{*Os7zWgabp6ffD7nxHuhPbJq3Bo zt{Zb>G+^W52EX6^m3#Icq6HNyCZe7|C&2x1Jm_C;U43-192%bo@O2d)&#E3`OqS8o5v3&R!gXQ-SWSX84@oMx9(-utsCe9@k#p1_e{DLDQt zc;!}Q)q7c!z(b&rV0vDl9;nY$+1PBKZCwZss*k5*G>AA*JwUBi=h4m4H`h-OKAh{% z3vxAmZbmJ-afiitiF(*zGuoVgx={?Udf1?!^ywviI<*e1sKtYDyHYBOmxy-Urd#XM zOZvQ0f0gCtYs6u#GQVP=5jJT>Ef%VabZZ^@^+WWM9?EWhVek;S00000 LNkvXXu0mjfSX_`J literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/sticky_focus_inactive.png b/awesome/themes/themes/vt/titlebar/sticky_focus_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..783df6932e07e6072e58c3dd9e97bfb5bcd331dd GIT binary patch literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%b@U_I1CZGssfk$L9 zkoEv$x0Bg+Ai=T%$8;bK*3WR~=*tKO1||nEwdiCme>!SMRtO(J% z|N84M>9wXkhO;XfAG~!;I3_VY=#WIS?~d2Ic5dC-eN4jZVCFLRCy_tw6LOl2J3Cvzt3_UY(dz#A+oarHr+mhH9stZraa#C&%pnx8Hw% zN~J_@(BXDzxta5=Ib3Thzq-1*>RQt&K>=R2S(lb2CG%A6m3#O8eZTk8ONPlj+j5m_ zZ*A+nefxH~OoQrD7p`kj_NR0T%w{jV{4&8n;=s1ITQB8`6)m0O8Jf$Sz4qe!?}f$1 z%@;Gagl*OTQMA(}azPN6=Ol%`WS(~ClHIX7V%=Y#r`g^Wbz!;pvPA4`nsBQVV|jUb z$76}dA1kVt7bo~1I3`hATf4XX^S+&D<zyVaXNTW$W>AU{PSQVwSmhA#eeUI1F>WOtv2zqudeqEC0)9Vilet3CF`YaEY zJ8sB-c!IZP=*kQ8gHthZq`I8CzNzSVA<|8j8IEYLEok t5S*V@Ql40p$^Z;gz0ADq;^f4FRK5J7^x5xhq=1STJYD@<);T3K0RWF}UdaFe literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/sticky_normal_active.png b/awesome/themes/themes/vt/titlebar/sticky_normal_active.png new file mode 100755 index 0000000000000000000000000000000000000000..ea1f2a653cfc5eb4cb7d33631f6ca55e32944529 GIT binary patch literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%b@U_I1CZGssfk$L9 zkoEv$x0Bg+Ai=T%$8;bK*3WR~=*tKO2By=VE{-7(yTGRa$o@5wn%&L`%Mdl(;a7O`{kSr$6&JkZLq#HEATWuIl7`a#F8Yo2fJ z{=9tk@@1KA*K-u)RCd3*Amw}g`u;rRy8>?4|i==hA1@G>X>Rlme;mf{C zdz7Tam-$-Is(}*QPFW*xsaYCF9kCV+vc| z@g!V#P@H<*y8U{G(1y7&A)g|Pa$i4Fzs_E`%tt%o`mSkgm(5!C#ua>Bn|;wfVZYYd zx4XB$Uc6t8t$`t+F4xiand6R~|IY26A9wRr_Uenv+@gCoKDvB8q_lH^psJki9s3>U zFJ4k9d_QplgWv>)T6V(^b8m4JHfs4cM);QFZjpLe%r>3_b=hoH#V%Jw|Hx9kHXTtFnM_-*g zu0BXD;d~*%=OGA9ucng;PngQTDJ@Qv%F=#{oOq!|Kh$= z%E!(h7n%HN|8^d31ODfx1y2u3+_`s8`QPW?)C(<2q7Q%O%2-kVz& z`?n$~C;hulN%#%^NGYBODV>Q&I3NFWydZkpR{IYF_u~mRrz1{=TTEX&LEX|drljxe zx!~v1mT?}=IgwR2ulw}toHcm@M?c;?kSH@rg|l*2v0{8`?NeW~aDCzSi;@TUu5&Xz z(olN4oM*CP_D!jL{rE#>cbRwYJ|?<<=H0ZPAAYLjZ94uc^_$U+v+l3@e%`aaRrkp| z{KfsF;q6ruSK8$O)3|DhYeY$MQEFmIs%{F9U@$T;u+#-2BjXT5Gb9nO2Fa!N5Gk(7?*r(#pURqQTZs>;M1& literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/titlebar/sticky_normal_inactive.png b/awesome/themes/themes/vt/titlebar/sticky_normal_inactive.png new file mode 100755 index 0000000000000000000000000000000000000000..aabb54ac3f2508235b8bfeb323e0209967fcf3f8 GIT binary patch literal 872 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE(}6TtKf|4)FC!Qjm~uQ_978NlFP(DQJK9m==y{uW*#`UuY@#tD zn>NlCTN1D#cGchNKgaJ}b=|$WG??2dT+8LLQlR0-wiVwE*X!NlG&EDb$}B&;xVrs&_udWha@1s9 z`*p{ZAbG}`I~4kC#NKDSl{}ex9sTyea731 zG~~Wqmtamlb6O~S?Zc`!L4Jp7m7=4g^Uci7?;k7lnG&?2o@K46MDmuaS*(|J4UQ$0 zmz(e3w{IGQ1Bc}FtzyjwABe|CMrN*EzurB_Yf37o=F?`)6Pt48T*xh`s^W6;*t27Y zMDe+U63zlF59Tx%_Z>cbIQ&kOch{l@X6>a4OKVKFACp*;*|m7F@{&xhV-hj9PO39R zWFMRwWOmvpW9{(=FRkqD-FM$TR$$TMZNWQxp4z#rAHmIR2f zN+c)roNe(v6~%q;WyzCs=lEI#cI@8my#N03w{PE0em3*+hwltKuictAcdl*bhu-TY z^OsJUHa+!cu8GuM=7i<^3=Ug^R+{`{mFHorO+GUr$V$$1`}x0r|MEZj-F)rZHM=WW zTd(K&YPyQJdQ4)OK7IPzy?ghr-@M2Fo~U12D?NY%?PN}v7C RMhd8i!PC{xWt~$(698P-aqIv9 literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/xmms2/next.png b/awesome/themes/themes/vt/xmms2/next.png new file mode 100644 index 0000000000000000000000000000000000000000..17d694dac7782234c5237b661351cd52be839fd1 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^DnKmE!3HFM)UWRaQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Q3`(%rg0Ktc8rPhVH|TWm5y78=*fUKav|7J0fjhIkx5 zJI$M~!GOa>^6=mFHhC(Fb=Daha(sB!*Iscjoo(nLby71%z$s14jbVX^v!qu{8Dqlf zcfL=8EDaf~wiE`s+x*qhjN}!czw=b5>yHy`bCcHPTu^*=>iau^;+?wvNk-+fa(Zc}4OeM*4A)=PBCU|UZ64EH^nNEU d`@isI66?HdXeIyv literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/xmms2/pause.png b/awesome/themes/themes/vt/xmms2/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..50c148129494589d34f1cca755e6e8785f166104 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ#^NA%Cx&(BWL^R}Y)RhkE%y{W;-5;PJdx@v7EBh@r8DR!45$~Evpiq>ji(`nz>9%y{W;-5;PJdx@v7EBh@r86gwv|FusS1BD7bT^vI!PM^IJ z$aTPggZaXeivQZ__QJO|=3V=BQRac50Y`|tkV>v~2~R_|%FIKz6fWm#UM|VFX8vkJ z!DY>9j`bTwO?q4}q`u+Ked#;#?^i~KZN^{HjaNI^gf+HooH{p>)##|v3GFiHm+KQB dmvkf-F*X_d>H6MQJ_od%!PC{xWt~$(695vDQCI)~ literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/xmms2/previous.png b/awesome/themes/themes/vt/xmms2/previous.png new file mode 100644 index 0000000000000000000000000000000000000000..a79ec718c9582edb37bf7406c653e66eb9f4f74d GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^DnKmE!3HFM)UWRaQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Q3`(%rg0Ktc8rPhVH|TWm5y7FH_fXITP;7J9lkhIkx* zJI#^rumTUu@rnQcKYe@DV@sxJj?M3L{xTnZ`1OFdkQk9H%(pN7n<--^}@0PLKi=< gZF^gtVZE0@c+w)dV+mX9fR1JGboFyt=akR{0FPgBf&c&j literal 0 HcmV?d00001 diff --git a/awesome/themes/themes/vt/xmms2/stop.png b/awesome/themes/themes/vt/xmms2/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..4792366746defc3c09071c5285e4e75d999af294 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G^tAk28_ZrvZCAbW|YuPgg4HW?u+fwNAAxj-RrPZ!4!i_>qf zDDp8V@Hk(L-}F0v=L$)oGZF^_Ix9|wG3-i~zJ0t;i22kk6~-e)5wo<6t*(FF=pJEq qtLf>~U#vFAlD=p78-~{PX3q?B7FIO8*b@dcmci52&t;ucLK6VkTR^P< literal 0 HcmV?d00001 From 606ffd1e774d352cf0ea70d62e700f6aafa9d61d Mon Sep 17 00:00:00 2001 From: ryuslash Date: Tue, 27 Jul 2010 23:27:39 +0200 Subject: [PATCH 15/24] fixed awesome rc --- awesome/rc.lua | 2 +- awesome/themes/default/layouts/max.png | Bin 321 -> 313 bytes awesome/themes/default/layouts/maxw.png | Bin 321 -> 301 bytes awesome/themes/default/theme.lua | 54 +++++----- .../themes/default/titlebar/close_normal.png | Bin 893 -> 893 bytes .../titlebar/floating_focus_inactive.png | Bin 571 -> 818 bytes .../titlebar/floating_normal_active.png | Bin 799 -> 799 bytes .../titlebar/floating_normal_inactive.png | Bin 562 -> 814 bytes .../titlebar/maximized_focus_inactive.png | Bin 793 -> 1277 bytes .../titlebar/maximized_normal_active.png | Bin 1208 -> 1208 bytes .../titlebar/maximized_normal_inactive.png | Bin 780 -> 1251 bytes .../default/titlebar/ontop_focus_inactive.png | Bin 722 -> 1073 bytes .../default/titlebar/ontop_normal_active.png | Bin 965 -> 965 bytes .../titlebar/ontop_normal_inactive.png | Bin 720 -> 1073 bytes .../titlebar/sticky_focus_inactive.png | Bin 611 -> 836 bytes .../default/titlebar/sticky_normal_active.png | Bin 967 -> 967 bytes .../titlebar/sticky_normal_inactive.png | Bin 625 -> 872 bytes .../{themes => }/default/xmms2/next.png | Bin .../{themes => }/default/xmms2/pause.png | Bin .../{themes => }/default/xmms2/play.png | Bin .../{themes => }/default/xmms2/previous.png | Bin .../{themes => }/default/xmms2/stop.png | Bin awesome/themes/{themes => }/test.png | Bin awesome/themes/themes/default/theme.lua | 98 ------------------ awesome/themes/themes/vt/background.png | Bin 43786 -> 0 bytes awesome/themes/themes/vt/layouts/fairh.png | Bin 194 -> 0 bytes awesome/themes/themes/vt/layouts/fairhw.png | Bin 194 -> 0 bytes awesome/themes/themes/vt/layouts/fairv.png | Bin 201 -> 0 bytes awesome/themes/themes/vt/layouts/fairvw.png | Bin 201 -> 0 bytes awesome/themes/themes/vt/layouts/floating.png | Bin 395 -> 0 bytes .../themes/themes/vt/layouts/floatingw.png | Bin 388 -> 0 bytes .../themes/themes/vt/layouts/fullscreen.png | Bin 202 -> 0 bytes .../themes/themes/vt/layouts/fullscreenw.png | Bin 202 -> 0 bytes .../themes/themes/vt/layouts/magnifier.png | Bin 209 -> 0 bytes .../themes/themes/vt/layouts/magnifierw.png | Bin 209 -> 0 bytes awesome/themes/themes/vt/layouts/max.png | Bin 313 -> 0 bytes awesome/themes/themes/vt/layouts/maxw.png | Bin 301 -> 0 bytes awesome/themes/themes/vt/layouts/tile.png | Bin 174 -> 0 bytes .../themes/themes/vt/layouts/tilebottom.png | Bin 195 -> 0 bytes .../themes/themes/vt/layouts/tilebottomw.png | Bin 216 -> 0 bytes awesome/themes/themes/vt/layouts/tileleft.png | Bin 172 -> 0 bytes .../themes/themes/vt/layouts/tileleftw.png | Bin 170 -> 0 bytes awesome/themes/themes/vt/layouts/tiletop.png | Bin 195 -> 0 bytes awesome/themes/themes/vt/layouts/tiletopw.png | Bin 215 -> 0 bytes awesome/themes/themes/vt/layouts/tilew.png | Bin 168 -> 0 bytes awesome/themes/themes/vt/submenu.png | Bin 440 -> 0 bytes awesome/themes/themes/vt/taglist/squarefw.png | Bin 187 -> 0 bytes awesome/themes/themes/vt/taglist/squarew.png | Bin 193 -> 0 bytes .../themes/themes/vt/tasklist/floating.png | Bin 345 -> 0 bytes .../themes/themes/vt/tasklist/floatingw.png | Bin 334 -> 0 bytes .../themes/themes/vt/titlebar/close_focus.png | Bin 666 -> 0 bytes .../themes/vt/titlebar/close_normal.png | Bin 893 -> 0 bytes .../vt/titlebar/floating_focus_active.png | Bin 598 -> 0 bytes .../vt/titlebar/floating_focus_inactive.png | Bin 818 -> 0 bytes .../vt/titlebar/floating_normal_active.png | Bin 799 -> 0 bytes .../vt/titlebar/floating_normal_inactive.png | Bin 814 -> 0 bytes .../vt/titlebar/maximized_focus_active.png | Bin 1013 -> 0 bytes .../vt/titlebar/maximized_focus_inactive.png | Bin 1277 -> 0 bytes .../vt/titlebar/maximized_normal_active.png | Bin 1208 -> 0 bytes .../vt/titlebar/maximized_normal_inactive.png | Bin 1251 -> 0 bytes .../themes/vt/titlebar/ontop_focus_active.png | Bin 774 -> 0 bytes .../vt/titlebar/ontop_focus_inactive.png | Bin 1073 -> 0 bytes .../vt/titlebar/ontop_normal_active.png | Bin 965 -> 0 bytes .../vt/titlebar/ontop_normal_inactive.png | Bin 1073 -> 0 bytes .../vt/titlebar/sticky_focus_active.png | Bin 833 -> 0 bytes .../vt/titlebar/sticky_focus_inactive.png | Bin 836 -> 0 bytes .../vt/titlebar/sticky_normal_active.png | Bin 967 -> 0 bytes .../vt/titlebar/sticky_normal_inactive.png | Bin 872 -> 0 bytes .../{themes/default => vt}/background.png | Bin .../{themes/default => vt}/layouts/fairh.png | Bin .../{themes/default => vt}/layouts/fairhw.png | Bin .../{themes/default => vt}/layouts/fairv.png | Bin .../{themes/default => vt}/layouts/fairvw.png | Bin .../default => vt}/layouts/floating.png | Bin .../default => vt}/layouts/floatingw.png | Bin .../default => vt}/layouts/fullscreen.png | Bin .../default => vt}/layouts/fullscreenw.png | Bin .../default => vt}/layouts/magnifier.png | Bin .../default => vt}/layouts/magnifierw.png | Bin .../{themes/default => vt}/layouts/max.png | Bin .../{themes/default => vt}/layouts/maxw.png | Bin .../{themes/default => vt}/layouts/tile.png | Bin .../default => vt}/layouts/tilebottom.png | Bin .../default => vt}/layouts/tilebottomw.png | Bin .../default => vt}/layouts/tileleft.png | Bin .../default => vt}/layouts/tileleftw.png | Bin .../default => vt}/layouts/tiletop.png | Bin .../default => vt}/layouts/tiletopw.png | Bin .../{themes/default => vt}/layouts/tilew.png | Bin .../themes/{themes/default => vt}/submenu.png | Bin .../default => vt}/taglist/squarefw.png | Bin .../default => vt}/taglist/squarew.png | Bin .../default => vt}/tasklist/floating.png | Bin .../default => vt}/tasklist/floatingw.png | Bin awesome/themes/{themes => }/vt/theme.lua | 0 .../default => vt}/titlebar/close_focus.png | Bin .../default => vt}/titlebar/close_normal.png | Bin .../titlebar/floating_focus_active.png | Bin .../titlebar/floating_focus_inactive.png | Bin .../titlebar/floating_normal_active.png | Bin .../titlebar/floating_normal_inactive.png | Bin .../titlebar/maximized_focus_active.png | Bin .../titlebar/maximized_focus_inactive.png | Bin .../titlebar/maximized_normal_active.png | Bin .../titlebar/maximized_normal_inactive.png | Bin .../titlebar/ontop_focus_active.png | Bin .../titlebar/ontop_focus_inactive.png | Bin .../titlebar/ontop_normal_active.png | Bin .../titlebar/ontop_normal_inactive.png | Bin .../titlebar/sticky_focus_active.png | Bin .../titlebar/sticky_focus_inactive.png | Bin .../titlebar/sticky_normal_active.png | Bin .../titlebar/sticky_normal_inactive.png | Bin awesome/themes/{themes => }/vt/xmms2/next.png | Bin .../themes/{themes => }/vt/xmms2/pause.png | Bin awesome/themes/{themes => }/vt/xmms2/play.png | Bin .../themes/{themes => }/vt/xmms2/previous.png | Bin awesome/themes/{themes => }/vt/xmms2/stop.png | Bin 118 files changed, 29 insertions(+), 125 deletions(-) rename awesome/themes/{themes => }/default/xmms2/next.png (100%) rename awesome/themes/{themes => }/default/xmms2/pause.png (100%) rename awesome/themes/{themes => }/default/xmms2/play.png (100%) rename awesome/themes/{themes => }/default/xmms2/previous.png (100%) rename awesome/themes/{themes => }/default/xmms2/stop.png (100%) rename awesome/themes/{themes => }/test.png (100%) delete mode 100755 awesome/themes/themes/default/theme.lua delete mode 100755 awesome/themes/themes/vt/background.png delete mode 100755 awesome/themes/themes/vt/layouts/fairh.png delete mode 100755 awesome/themes/themes/vt/layouts/fairhw.png delete mode 100755 awesome/themes/themes/vt/layouts/fairv.png delete mode 100755 awesome/themes/themes/vt/layouts/fairvw.png delete mode 100755 awesome/themes/themes/vt/layouts/floating.png delete mode 100755 awesome/themes/themes/vt/layouts/floatingw.png delete mode 100755 awesome/themes/themes/vt/layouts/fullscreen.png delete mode 100755 awesome/themes/themes/vt/layouts/fullscreenw.png delete mode 100755 awesome/themes/themes/vt/layouts/magnifier.png delete mode 100755 awesome/themes/themes/vt/layouts/magnifierw.png delete mode 100755 awesome/themes/themes/vt/layouts/max.png delete mode 100755 awesome/themes/themes/vt/layouts/maxw.png delete mode 100755 awesome/themes/themes/vt/layouts/tile.png delete mode 100755 awesome/themes/themes/vt/layouts/tilebottom.png delete mode 100755 awesome/themes/themes/vt/layouts/tilebottomw.png delete mode 100755 awesome/themes/themes/vt/layouts/tileleft.png delete mode 100755 awesome/themes/themes/vt/layouts/tileleftw.png delete mode 100755 awesome/themes/themes/vt/layouts/tiletop.png delete mode 100755 awesome/themes/themes/vt/layouts/tiletopw.png delete mode 100755 awesome/themes/themes/vt/layouts/tilew.png delete mode 100755 awesome/themes/themes/vt/submenu.png delete mode 100755 awesome/themes/themes/vt/taglist/squarefw.png delete mode 100755 awesome/themes/themes/vt/taglist/squarew.png delete mode 100755 awesome/themes/themes/vt/tasklist/floating.png delete mode 100755 awesome/themes/themes/vt/tasklist/floatingw.png delete mode 100755 awesome/themes/themes/vt/titlebar/close_focus.png delete mode 100755 awesome/themes/themes/vt/titlebar/close_normal.png delete mode 100755 awesome/themes/themes/vt/titlebar/floating_focus_active.png delete mode 100755 awesome/themes/themes/vt/titlebar/floating_focus_inactive.png delete mode 100755 awesome/themes/themes/vt/titlebar/floating_normal_active.png delete mode 100755 awesome/themes/themes/vt/titlebar/floating_normal_inactive.png delete mode 100755 awesome/themes/themes/vt/titlebar/maximized_focus_active.png delete mode 100755 awesome/themes/themes/vt/titlebar/maximized_focus_inactive.png delete mode 100755 awesome/themes/themes/vt/titlebar/maximized_normal_active.png delete mode 100755 awesome/themes/themes/vt/titlebar/maximized_normal_inactive.png delete mode 100755 awesome/themes/themes/vt/titlebar/ontop_focus_active.png delete mode 100755 awesome/themes/themes/vt/titlebar/ontop_focus_inactive.png delete mode 100755 awesome/themes/themes/vt/titlebar/ontop_normal_active.png delete mode 100755 awesome/themes/themes/vt/titlebar/ontop_normal_inactive.png delete mode 100755 awesome/themes/themes/vt/titlebar/sticky_focus_active.png delete mode 100755 awesome/themes/themes/vt/titlebar/sticky_focus_inactive.png delete mode 100755 awesome/themes/themes/vt/titlebar/sticky_normal_active.png delete mode 100755 awesome/themes/themes/vt/titlebar/sticky_normal_inactive.png rename awesome/themes/{themes/default => vt}/background.png (100%) rename awesome/themes/{themes/default => vt}/layouts/fairh.png (100%) rename awesome/themes/{themes/default => vt}/layouts/fairhw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/fairv.png (100%) rename awesome/themes/{themes/default => vt}/layouts/fairvw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/floating.png (100%) rename awesome/themes/{themes/default => vt}/layouts/floatingw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/fullscreen.png (100%) rename awesome/themes/{themes/default => vt}/layouts/fullscreenw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/magnifier.png (100%) rename awesome/themes/{themes/default => vt}/layouts/magnifierw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/max.png (100%) rename awesome/themes/{themes/default => vt}/layouts/maxw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/tile.png (100%) rename awesome/themes/{themes/default => vt}/layouts/tilebottom.png (100%) rename awesome/themes/{themes/default => vt}/layouts/tilebottomw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/tileleft.png (100%) rename awesome/themes/{themes/default => vt}/layouts/tileleftw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/tiletop.png (100%) rename awesome/themes/{themes/default => vt}/layouts/tiletopw.png (100%) rename awesome/themes/{themes/default => vt}/layouts/tilew.png (100%) rename awesome/themes/{themes/default => vt}/submenu.png (100%) rename awesome/themes/{themes/default => vt}/taglist/squarefw.png (100%) rename awesome/themes/{themes/default => vt}/taglist/squarew.png (100%) rename awesome/themes/{themes/default => vt}/tasklist/floating.png (100%) rename awesome/themes/{themes/default => vt}/tasklist/floatingw.png (100%) rename awesome/themes/{themes => }/vt/theme.lua (100%) rename awesome/themes/{themes/default => vt}/titlebar/close_focus.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/close_normal.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/floating_focus_active.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/floating_focus_inactive.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/floating_normal_active.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/floating_normal_inactive.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/maximized_focus_active.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/maximized_focus_inactive.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/maximized_normal_active.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/maximized_normal_inactive.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/ontop_focus_active.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/ontop_focus_inactive.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/ontop_normal_active.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/ontop_normal_inactive.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/sticky_focus_active.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/sticky_focus_inactive.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/sticky_normal_active.png (100%) rename awesome/themes/{themes/default => vt}/titlebar/sticky_normal_inactive.png (100%) rename awesome/themes/{themes => }/vt/xmms2/next.png (100%) rename awesome/themes/{themes => }/vt/xmms2/pause.png (100%) rename awesome/themes/{themes => }/vt/xmms2/play.png (100%) rename awesome/themes/{themes => }/vt/xmms2/previous.png (100%) rename awesome/themes/{themes => }/vt/xmms2/stop.png (100%) diff --git a/awesome/rc.lua b/awesome/rc.lua index d7f339a..cedefc8 100644 --- a/awesome/rc.lua +++ b/awesome/rc.lua @@ -397,4 +397,4 @@ client.add_signal("unfocus", function(c) -- }}} awful.util.spawn_with_shell("xcompmgr") -awful.util.spawn_with_shell("xscreensaver") \ No newline at end of file +awful.util.spawn_with_shell("xscreensaver") diff --git a/awesome/themes/default/layouts/max.png b/awesome/themes/default/layouts/max.png index fe70bef18f12c9b404f4238aac9259354817f605..4246d56c71bf5fa103d0c038194871be572b4309 100644 GIT binary patch delta 280 zcmV+z0q6d~0=WW^7#;!x0002j2boO(000S4OjJbx000000GF44g@rf8kw6uH0%i+* zWB>pF(Md!>R5*>5l(7-SAPfXg0VP~Nlt3W*Z{-6d(CC8yci{2tn6*GBW48-GfQfS1 z#$FYS4fhI2I4f|%N0Hbf+=^sO!cimy;V2RZ;dl~TARJFJCJ4uq5C`xn4oHcu04W(W zKuU-NyovxvV(Wq<8S{d3BOYLHp`LG_bpdRpIl$XM0^&Y+R2}svuoXK@aJz8wZNO7EMK?aKkl5%xotHb|qSmA%;#2MLTss)tTuDZ!O!_wdVj$NDYaVQ<{uQ7Ir+k6PwT~;yB?^ zmP+)udrYS`edy(he#qfGvvJp#_KH_G!#)JXlz1L}e|{$BxBW?J)(eNkYk5RufR1MHboFyt=akR{01C%&U;qFB diff --git a/awesome/themes/default/layouts/maxw.png b/awesome/themes/default/layouts/maxw.png index d8debb86a9451d373591ef0afc05fb95227d560f..14c161a6e35de4e710fb8de3467b75e6c185c342 100644 GIT binary patch delta 248 zcmV z%LyX&8ezTCveK|#E3DV>Q^8}!1(jNmyaBDc=$F>J9?#hKb^L`-;K|ns&pu9gaX;bi zeTV7I?ST1JH&p2XOX&^P(kpDG7Z{}ry7as=9i^v(c`vOgr41IPZLCUL*_5_0lvcFT z=6yPpUN#-`t~6av7|R9QdcnF~u#5|;FPM+tkgF8uc|J^wN7KlNut<&gjFSN~^23DK y5~E^W%#6J;JP|xXNlXbYQ6}8Podx)RNqzvUUX5G3(;JQe0000bdYI+NGZx^prw85kJY0(?STw|@x!|Np=7EFVUo2xCc*UoeBivm0q3 zPLj8~3quF1tOt<8S>O>_%)r1c48n{Iv*t(u1=&kHeO=jaF^UT)u$GB0Pyz}q_jGX# z(Kx^Kk|AHSfdI>atuZ^EaQSox7pqLWxh0)(RcC;t>G|01>@3f9#J!XqR;K3K1_o9J1|07?Js21m nR7+eVN^CsWngepQ=O54 pfkCyzHKGKpAvZrIGp!P?!N4fQ(A>(@#L57wA$HpH+{r%7h5#XB9Mu2- diff --git a/awesome/themes/default/titlebar/floating_focus_inactive.png b/awesome/themes/default/titlebar/floating_focus_inactive.png index f69af15a93257e95abd31ddb8fe8f2dd2220d0ca..8d724bffe2b89abb89a58307c90e65e6795ca7ee 100644 GIT binary patch delta 765 zcmVt>q<#^CId$39HS`%_p0M zLZK7{!M5-FWngY)WreGMt1H^=HbArA@9&(Qoz=#{-s8o@#6(^xwd;9ab$xxE)zwvI zW@bhLj*gB>^?H4`*XwOtYu_eGax(VBVHlQ_QU@Cw8~L@hHG&`*n`*sYXK!yW7LobE zU=aTn_Id2_&fV0&RG5*KKB5*1Ea5sRluS>$*fyM7P@oc%!v$JTBf}4Xt%;Fc@%gaj~1r zGBG+eH!CnOIxsK@?ukeM001R)MObugZ)9m^c`amN vbY%cCFfchSFgYzSH&ih&Ix{&sFgYtQFgh?WJuw#S00000NkvXXu0mjfln+>! delta 516 zcmdnQwwq;wq!?qOt zuzb_(oFi#}n-df_3W{90ddTmDSX0x3s9P^ZJElKSjfgsWE-ZWE5|4>ag;ocT=}7!n zDhzP$cy}&Jg{4<;%Z3lD+4ixgS