diff --git a/browser/lib/modes.js b/browser/lib/modes.js index 2ea68258..8f1cdbd5 100644 --- a/browser/lib/modes.js +++ b/browser/lib/modes.js @@ -8,379 +8,442 @@ const modes = [ name: 'abap', label: 'ABAP', alias: [], - mode: 'abap' + mode: 'abap', + match: /\.abap$/i }, { name: 'abc', label: 'ABC', alias: [], - mode: 'abc' + mode: 'abc', + match: /\.abc$/i }, { name: 'actionscript', label: 'ActionScript', alias: ['as'], - mode: 'actionscript' + mode: 'actionscript', + match: /\.as$/i }, { name: 'ada', label: 'Ada', alias: [], - mode: 'ada' + mode: 'ada', + match: /\.ada$/i }, { name: 'apache_conf', label: 'Apache config', alias: ['apache', 'conf'], - mode: 'apache_conf' + mode: 'apache_conf', + match: /\.conf$/i }, { name: 'applescript', label: 'AppleScript', alias: ['scpt'], - mode: 'applescript' + mode: 'applescript', + match: /\.scpt$|\.scptd$|\.AppleScript$/i }, { name: 'asciidoc', label: 'AsciiDoc', alias: ['ascii', 'doc', 'txt'], - mode: 'asciidoc' + mode: 'asciidoc', + match: /\.txt$/i }, { name: 'assembly_x86', label: 'Assembly x86', alias: ['assembly', 'x86', 'asm'], - mode: 'assembly_x86' + mode: 'assembly_x86', + match: /\.asm$/i }, { name: 'autohotkey', label: 'AutoHotkey', alias: ['ahk'], - mode: 'autohotkey' + mode: 'autohotkey', + match: /\.ahk$/i }, { name: 'batchfile', label: 'Batch file', alias: ['dos', 'windows', 'bat', 'cmd', 'btm'], - mode: 'batchfile' + mode: 'batchfile', + match: /\.bat$|\.cmd$/i }, { name: 'c', label: 'C', alias: ['c', 'h', 'clang', 'clang'], - mode: 'c_cpp' + mode: 'c_cpp', + match: /\.c$|\.h\+\+$/i }, { name: 'cirru', label: 'Cirru', alias: [], - mode: 'cirru' + mode: 'cirru', + match: /\.cirru$/i }, { name: 'clojure', label: 'Clojure', alias: ['clj', 'cljs', 'cljc', 'edn'], - mode: 'clojure' + mode: 'clojure', + match: /\.clj$|\.cljs$|\.cljc$|\.edn$/i }, { name: 'cobol', label: 'COBOL', alias: ['cbl', 'cob', 'cpy'], - mode: 'cobol' + mode: 'cobol', + match: /\.cbl$|\.cob$\.cpy$/i }, { name: 'coffee', label: 'CoffeeScript', alias: ['coffee'], - mode: 'coffee' + mode: 'coffee', + match: /\.coffee$|\.litcoffee$/i }, { name: 'coldfusion', label: 'ColdFusion', alias: ['cfm', 'cfc'], - mode: 'coldfusion' + mode: 'coldfusion', + match: /\.cfm$|\.cfc$/i }, { name: 'cpp', label: 'C++', alias: ['cc', 'cpp', 'cxx', 'hh', 'c++', 'cplusplus'], - mode: 'c_cpp' + mode: 'c_cpp', + match: /\.cc$|\.cpp$|\.cxx$|\.C$|\.c\+\+$|\.hh$|\.hpp$|\.hxx$|\.h\+\+$/i }, { name: 'csharp', label: 'C#', alias: ['cs', 'c#'], - mode: 'csharp' + mode: 'csharp', + match: /\.cs$/i }, { name: 'css', label: 'CSS', alias: ['cascade', 'stylesheet'], - mode: 'css' + mode: 'css', + match: /\.css$/i }, { name: 'curly', label: 'Curly', alias: [], - mode: 'curly' + mode: 'curly', + match: /\.curly$/i }, { name: 'd', label: 'D', alias: ['dlang'], - mode: 'd' + mode: 'd', + match: /\.d$/i }, { name: 'dockerfile', label: 'DockerFile', alias: ['docker'], - mode: 'docker' + mode: 'docker', + match: /Dockerfile$/i }, { name: 'dart', label: 'Dart', alias: [], - mode: 'dart' + mode: 'dart', + match: /\.dart$/i }, { name: 'diff', label: 'Diff', alias: [], - mode: 'diff' + mode: 'diff', + match: /\.diff$|\.patch$/i }, { name: 'django', label: 'Django', alias: [], - mode: 'djt' + mode: 'djt', + match: /\.djt$/i }, { name: 'dot', label: 'DOT', alias: ['gv'], - mode: 'dot' + mode: 'dot', + match: /\.gv$|\.dot/i }, { name: 'eiffel', label: 'Eiffel', alias: [], - mode: 'eiffel' + mode: 'eiffel', + match: /\.e$/i }, { name: 'ejs', label: 'EJS', alias: [], - mode: 'ejs' + mode: 'ejs', + match: /\.ejs$/i }, { name: 'elixir', label: 'Elixir', alias: ['ex', 'exs'], - mode: 'elixir' + mode: 'elixir', + match: /\.ex$|\.exs$/i }, { name: 'elm', label: 'Elm', alias: [], - mode: 'elm' + mode: 'elm', + match: /\.elm$/i }, { name: 'erlang', label: 'Erlang', alias: ['erl', 'hrl'], - mode: 'erlang' + mode: 'erlang', + match: /\.erl$|\.hrl$/i }, { name: 'forth', label: 'Forth', alias: ['fs', 'fth'], - mode: 'forth' + mode: 'forth', + match: /\.fs$|\.fth$/i }, { name: 'freemaker', label: 'Freemaker', alias: ['ftl'], - mode: 'ftl' + mode: 'ftl', + match: /\.ftl$/i }, { name: 'gcode', label: 'G-code', alias: ['mpt', 'mpf', 'nc'], - mode: 'gcode' + mode: 'gcode', + match: /\.mpt$|\.mpf$|\.nc$/i }, { name: 'gherkin', label: 'Gherkin', alias: ['cucumber'], - mode: 'gherkin' + mode: 'gherkin', + match: /\.feature$/i }, { name: 'gitignore', label: 'Gitignore', alias: ['git'], - mode: 'gitignore' + mode: 'gitignore', + match: /\.gitignore$/i }, { name: 'glsl', label: 'GLSL', alias: ['opengl', 'shading'], - mode: 'glsl' + mode: 'glsl', + match: /\.vert$|\.frag/i }, { name: 'golang', label: 'Go', alias: ['go'], - mode: 'golang' + mode: 'golang', + match: /\.go$/i }, { name: 'groovy', label: 'Groovy', alias: [], - mode: 'grooby' + mode: 'grooby', + match: /\.groovy$/i }, { name: 'haml', label: 'Haml', alias: [], - mode: 'haml' + mode: 'haml', + match: /\.haml$/i }, { name: 'handlebars', label: 'Handlebars', alias: ['hbs'], - mode: 'handlebars' + mode: 'handlebars', + match: /\.hbs$/i }, { name: 'haskell', label: 'Haskell', alias: ['hs', 'lhs'], - mode: 'haskell' + mode: 'haskell', + match: /\.hs$|\.lhs$/i }, { name: 'haxe', label: 'Haxe', alias: ['hx', 'hxml'], - mode: 'haxe' + mode: 'haxe', + match: /\.hx$|\.hxml$/i }, { name: 'html', label: 'HTML', alias: [], - mode: 'html' + mode: 'html', + match: /\.html$/i }, { name: 'html_ruby', label: 'HTML (Ruby)', alias: ['erb', 'rhtml'], - mode: 'html_ruby' + mode: 'html_ruby', + match: /\.erb$|\.rhtml$/i }, { name: 'jsx', label: 'JSX', alias: ['es', 'babel', 'js', 'jsx', 'react'], - mode: 'jsx' + mode: 'jsx', + match: /\.jsx$/i }, { name: 'typescript', label: 'TypeScript', alias: ['ts'], - mode: 'typescript' + mode: 'typescript', + match: /\.ts$/i }, { name: 'ini', label: 'INI file', alias: [], - mode: 'ini' + mode: 'ini', + match: /\.ini$/i }, { name: 'io', label: 'Io', alias: [], - mode: 'io' + mode: 'io', + match: /\.io$/i }, { name: 'jack', label: 'Jack', alias: [], - mode: 'jack' + mode: 'jack', + match: /\.jack$/i }, { - name: 'jade', - label: 'Jade', - alias: [], - mode: 'jade' + name: 'pug', + label: 'Pug(Jade)', + alias: ['jade'], + mode: 'jade', + match: /\.jade$|\.pug$/i }, { name: 'java', label: 'Java', alias: [], - mode: 'java' + mode: 'java', + match: /\.java$/i }, { name: 'javascript', label: 'JavaScript', alias: ['js', 'jscript', 'babel', 'es'], - mode: 'javascript' + mode: 'javascript', + match: /\.js$/i }, { name: 'json', label: 'JSON', alias: [], - mode: 'json' + mode: 'json', + match: /\.json$/i }, { name: 'jsoniq', label: 'JSONiq', alias: ['query'], - mode: 'jsoniq' + mode: 'jsoniq', + match: /\.jq$|\.jqy$/i }, { name: 'jsp', label: 'JSP', alias: [], - mode: 'jsp' + mode: 'jsp', + match: /\.jsp$/i }, { name: 'julia', label: 'Julia', alias: [], - mode: 'julia' + mode: 'julia', + match: /\.jl$/i }, { name: 'latex', label: 'Latex', alias: ['tex'], - mode: 'latex' + mode: 'latex', + match: /\.tex$/i }, { name: 'lean', label: 'Lean', alias: [], - mode: 'lean' + mode: 'lean', + match: /\.lean$/i }, { name: 'less', label: 'Less', alias: [], - mode: 'less' + mode: 'less', + match: /\.less$/i }, { name: 'liquid', label: 'Liquid', alias: [], - mode: 'liquid' + mode: 'liquid', + match: /\.liquid$/i }, { name: 'lisp', label: 'Lisp', alias: ['lsp'], - mode: 'lisp' + mode: 'lisp', + match: /\.lisp$|\.lsp$|\.cl/i }, { name: 'livescript', label: 'LiveScript', alias: ['ls'], - mode: 'livescript' + mode: 'livescript', + match: /\.ls$/i }, { name: 'logiql', @@ -392,19 +455,22 @@ const modes = [ name: 'lsl', label: 'LSL', alias: [], - mode: 'lsl' + mode: 'lsl', + match: /\.lsl$/i }, { name: 'lua', label: 'Lua', alias: [], - mode: 'lua' + mode: 'lua', + match: /\.lsl$/i }, { name: 'luapage', label: 'Luapage', alias: [], - mode: 'luapage' + mode: 'luapage', + match: /\.lp$/i }, { name: 'lucene', @@ -416,13 +482,15 @@ const modes = [ name: 'makefile', label: 'Makefile', alias: [], - mode: 'makefile' + mode: 'makefile', + match: /Makefile$/i }, { name: 'markdown', label: 'Markdown', alias: ['md'], - mode: 'markdown' + mode: 'markdown', + match: /\.md$/i }, { name: 'mask', @@ -434,7 +502,8 @@ const modes = [ name: 'matlab', label: 'MATLAB', alias: [], - mode: 'matlab' + mode: 'matlab', + match: /\.m$|\.mat$/i }, { name: 'maze', @@ -464,55 +533,64 @@ const modes = [ name: 'mysql', label: 'MySQL', alias: [], - mode: 'mysql' + mode: 'mysql', + match: /\.mysql$/i }, { name: 'nix', label: 'Nix', alias: [], - mode: 'nix' + mode: 'nix', + match: /\.nix$/i }, { name: 'objectivec', label: 'Objective C', alias: ['objc'], - mode: 'objectivec' + mode: 'objectivec', + match: /\.h$|\.m$|\.mm$/i }, { name: 'ocaml', label: 'OCaml', alias: [], - mode: 'ocaml' + mode: 'ocaml', + match: /\.ml$|\.mli$/i }, { name: 'pascal', label: 'Pascal', alias: [], - mode: 'pascal' + mode: 'pascal', + match: /\.pp$|\.pas$|\.inc$/i }, { name: 'perl', label: 'Perl', alias: [], - mode: 'perl' + mode: 'perl', + match: /\.pl$|\.pm$|\.t$|\.pod$/i }, { name: 'pgsql', label: 'Postgres SQL', alias: ['postgres'], - mode: 'pgsql' + mode: 'pgsql', + match: /\.pgsql$/i }, { name: 'php', label: 'PHP', alias: [], - mode: 'php' + mode: 'php', + match: /\.php$/i }, { name: 'powershell', label: 'PowerShell', alias: ['ps1'], - mode: 'powershell' + mode: 'powershell', + match: /\.ps1$/i }, { name: 'praat', @@ -524,121 +602,141 @@ const modes = [ name: 'prolog', label: 'Prolog', alias: ['pl', 'pro'], - mode: 'prolog' + mode: 'prolog', + match: /\.pl$/i }, { name: 'properties', label: 'Properties', alias: [], - mode: 'properties' + mode: 'properties', + match: /\.properties$/i }, { name: 'protobuf', label: 'Protocol Buffers', alias: ['protocol', 'buffers'], - mode: 'protobuf' + mode: 'protobuf', + match: /\.proto$/i }, { name: 'python', label: 'Python', alias: ['py'], - mode: 'python' + mode: 'python', + match: /\.py$/i }, { name: 'r', label: 'R', alias: ['rlang'], - mode: 'r' + mode: 'r', + match: /\.r$/i }, { name: 'rdoc', label: 'RDoc', alias: [], - mode: 'rdoc' + mode: 'rdoc', + match: /\.rdoc$/i }, { name: 'ruby', label: 'Ruby', alias: ['rb'], - mode: 'ruby' + mode: 'ruby', + match: /\.rb$/i }, { name: 'rust', label: 'Rust', alias: [], - mode: 'rust' + mode: 'rust', + match: /\.rs$/i }, { name: 'sass', label: 'Sass', alias: [], - mode: 'sass' + mode: 'sass', + match: /\.sass$/i }, { name: 'scad', label: 'SCAD', alias: [], - mode: 'scad' + mode: 'scad', + match: /\.scad$/i }, { name: 'scala', label: 'Scala', alias: [], - mode: 'scala' + mode: 'scala', + match: /\.scala$|\.sc$/i }, { name: 'scheme', label: 'Scheme', alias: ['scm', 'ss'], - mode: 'scheme' + mode: 'scheme', + match: /\.scm$|\.ss$/i }, { name: 'scss', label: 'Scss', alias: [], - mode: 'scss' + mode: 'scss', + match: /\.scss$/i }, { name: 'sh', label: 'Shell', alias: ['shell'], - mode: 'sh' + mode: 'sh', + match: /\.sh$/i }, { name: 'sjs', label: 'StratifiedJS', alias: ['stratified'], - mode: 'sjs' + mode: 'sjs', + match: /\.sjs$/i }, { name: 'smarty', label: 'Smarty', alias: [], - mode: 'smarty' + mode: 'smarty', + match: /\.smarty$/i }, { name: 'snippets', label: 'Snippets', alias: [], - mode: 'snippets' + mode: 'snippets', + match: /snippets$/i }, { name: 'soy_template', label: 'Soy Template', alias: ['soy'], - mode: 'soy_template' + mode: 'soy_template', + match: /\.soy$/i }, { name: 'space', label: 'Space', alias: [], - mode: 'space' + mode: 'space', + match: /\.space$/i }, { name: 'sql', label: 'SQL', alias: [], - mode: 'sql' + mode: 'sql', + match: /\.sql$/i }, { name: 'sqlserver', @@ -650,103 +748,120 @@ const modes = [ name: 'stylus', label: 'Stylus', alias: [], - mode: 'stylus' + mode: 'stylus', + match: /\.styl$/i }, { name: 'svg', label: 'SVG', alias: [], - mode: 'svg' + mode: 'svg', + match: /\.svg$/i }, { name: 'swift', label: 'Swift', alias: [], - mode: 'swift' + mode: 'swift', + match: /\.swift$/i }, { name: 'swig', label: 'SWIG', alias: [], - mode: 'swig' + mode: 'swig', + match: /\.i$|\.swg$/i }, { name: 'tcl', label: 'Tcl', alias: [], - mode: 'tcl' + mode: 'tcl', + match: /\.tcl$/i }, { name: 'tex', label: 'TeX', alias: [], - mode: 'tex' + mode: 'tex', + match: /\.tex$/i }, { name: 'textile', label: 'Textile', alias: [], - mode: 'textile' + mode: 'textile', + match: /\.textile$/i }, { name: 'toml', label: 'TOML', alias: [], - mode: 'toml' + mode: 'toml', + match: /\.toml$/i }, { name: 'twig', label: 'Twig', alias: [], - mode: 'twig' + mode: 'twig', + match: /\.twig$/i }, { name: 'vala', label: 'Vala', alias: [], - mode: 'vala' + mode: 'vala', + match: /\.vala$|\.vapi$/i }, { name: 'vbscript', label: 'VBScript', alias: ['vbs', 'vbe'], - mode: 'vbscript' + mode: 'vbscript', + match: /\.vbs$|\.vbe$/i }, { name: 'velocity', label: 'Velocity', alias: [], - mode: 'velocity' + mode: 'velocity', + match: /\.vm$/i }, { name: 'verilog', label: 'Verilog', alias: [], - mode: 'verilog' + mode: 'verilog', + match: /\.v$/i }, { name: 'vhdl', label: 'VHDL', alias: [], - mode: 'vhdl' + mode: 'vhdl', + match: /\.vhdl$/i }, { name: 'xml', label: 'XML', alias: [], - mode: 'xml' + mode: 'xml', + match: /\.xml$/i }, { name: 'xquery', label: 'XQuery', alias: [], - mode: 'xquery' + mode: 'xquery', + match: /\.xq$|\.xqy$|\.xquery$/i }, { name: 'yaml', label: 'YAML', alias: [], - mode: 'yaml' + mode: 'yaml', + match: /\.yaml$/i } ] diff --git a/browser/main/Detail/SnippetNoteDetail.js b/browser/main/Detail/SnippetNoteDetail.js index 94471e2d..2bfc5714 100644 --- a/browser/main/Detail/SnippetNoteDetail.js +++ b/browser/main/Detail/SnippetNoteDetail.js @@ -11,6 +11,17 @@ import modes from 'browser/lib/modes' import { hashHistory } from 'react-router' import ee from 'browser/main/lib/eventEmitter' +function detectModeByFilename (filename) { + for (let key in modes) { + const mode = modes[key] + if (mode.match != null && mode.match.test(filename)) { + console.log(mode) + return mode.mode + } + } + return null +} + const electron = require('electron') const { remote } = electron const Menu = remote.Menu @@ -251,18 +262,18 @@ class SnippetNoteDetail extends React.Component { } } - handleNameInputChange (index) { - return (e) => { - let snippets = this.state.note.snippets.slice() - snippets[index].name = e.target.value - this.state.note.snippets = snippets + handleNameInputChange (e, index) { + let snippets = this.state.note.snippets.slice() + snippets[index].name = e.target.value + let mode = detectModeByFilename(e.target.value.trim()) + if (mode != null) snippets[index].mode = mode + this.state.note.snippets = snippets - this.setState({ - note: this.state.note - }, () => { - this.save() - }) - } + this.setState({ + note: this.state.note + }, () => { + this.save() + }) } handleModeButtonClick (index) { @@ -359,7 +370,7 @@ class SnippetNoteDetail extends React.Component { this.handleNameInputChange(index)(e)} + onChange={(e) => this.handleNameInputChange(e, index)} />