mirror of
https://github.com/cmderdev/cmder.git
synced 2025-07-17 04:59:09 +08:00
Compare commits
70 Commits
v1.0.0-bet
...
v1.1.2
Author | SHA1 | Date | |
---|---|---|---|
4f5a96aec7 | |||
cbe2f25dcb | |||
fcea0b5b49 | |||
08e478f7a9 | |||
27f0eb2c95 | |||
394c24eb16 | |||
d1d8c3ef76 | |||
4744fb1c61 | |||
3c979780f9 | |||
092c046456 | |||
c1029ab245 | |||
fc19a8b328 | |||
340d70a596 | |||
fa179f6528 | |||
e5e9e67ee7 | |||
8e0312aec4 | |||
8f6a473a40 | |||
2b12546cb0 | |||
ed42db82f6 | |||
5c20bbb08d | |||
56613b9758 | |||
1ef7ca682f | |||
9feec9e0c2 | |||
686e3516ed | |||
48e4046754 | |||
d3d2b80d88 | |||
6126437762 | |||
168958ce2b | |||
ee50cc5e7c | |||
f7d1dfa2b7 | |||
12d21de1c3 | |||
a231fd9f60 | |||
9d5d3e1556 | |||
d95f25207d | |||
f3d93c0f99 | |||
47b725bf0f | |||
6ae803987b | |||
027be08286 | |||
42bad3e509 | |||
2ac148ce22 | |||
55aef09412 | |||
0bde8b361a | |||
f9c6d61ee0 | |||
bbcbd2ece9 | |||
6f6d9f29ec | |||
4d926e0836 | |||
75cb46392e | |||
471e341a97 | |||
c2b37021d4 | |||
3fefa9698e | |||
14799b307d | |||
4c4930704f | |||
42d22f1e17 | |||
2d0a7093d4 | |||
f8b96665a8 | |||
049e54dfe0 | |||
dc0cc7350b | |||
8489977575 | |||
ee898d9d28 | |||
a516858048 | |||
4dc1065399 | |||
eaa78c6bf3 | |||
2521097f72 | |||
3704ff3e2e | |||
c2c0e1c3aa | |||
ec5f8f9808 | |||
aefb0f2709 | |||
2cceaaef23 | |||
2c0a6d095f | |||
e38aded028 |
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
5
.gitignore
vendored
5
.gitignore
vendored
@ -3,4 +3,7 @@
|
|||||||
|
|
||||||
vendor/*
|
vendor/*
|
||||||
!vendor/*.md
|
!vendor/*.md
|
||||||
!vendor/*.bat
|
!vendor/*.bat
|
||||||
|
config/.history
|
||||||
|
Thumbs.db
|
||||||
|
*.exe
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
@echo off
|
|
||||||
start vendor/ConEmu/ConEmu.exe /Title Cmder /LoadCfgFile ../../config/ConEmu.xml
|
|
@ -8,7 +8,7 @@ Cmder is a **software package** created out of pure frustration over absence of
|
|||||||
|
|
||||||
## Why use it
|
## Why use it
|
||||||
|
|
||||||
The main advantage of Cmder is portablibity. It is designed to be totally self-container. With no external dependencies. That makes is great for **USB Sticks** or **Dropbox**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies. That makes it great for **USB Sticks** or **Dropbox**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@ -25,13 +25,14 @@ The main advantage of Cmder is portablibity. It is designed to be totally self-c
|
|||||||
|
|
||||||
* `Ctrl + t` : new tab dialog (maybe you want to open cmd as admin?)
|
* `Ctrl + t` : new tab dialog (maybe you want to open cmd as admin?)
|
||||||
* `Ctrl + w` : close tab
|
* `Ctrl + w` : close tab
|
||||||
|
* `Ctrl + d` : close tab (if pressed on empty command)
|
||||||
* `Ctrl + alt + number` : fast new tab: `1` - CMD, `2` - Powershell `*` - More to come
|
* `Ctrl + alt + number` : fast new tab: `1` - CMD, `2` - Powershell `*` - More to come
|
||||||
* `Alt + enter`: Fullscreen
|
* `Alt + enter`: Fullscreen
|
||||||
|
|
||||||
### Shell
|
### Shell
|
||||||
|
|
||||||
* `Shift + Up` : Traverse up in directory structure (lovely feature!)
|
* `Shift + Up` : Traverse up in directory structure (lovely feature!)
|
||||||
* `End, Home, ctrl` : Traversing text with as usual on Windows
|
* `End, Home, Ctrl` : Traversing text with as usual on Windows
|
||||||
* `Ctrl + r` : History search
|
* `Ctrl + r` : History search
|
||||||
* `Shift + mouse` : Select and copy text from buffer
|
* `Shift + mouse` : Select and copy text from buffer
|
||||||
|
|
||||||
@ -74,4 +75,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
## Bin
|
## Bin
|
||||||
|
|
||||||
Thif folder will be injected into path at runtime
|
This folder will be injected into path at runtime
|
||||||
|
@ -1,4 +1,28 @@
|
|||||||
@echo off
|
@echo off
|
||||||
echo %* >> %~dp0..\config\aliases
|
if ["%1"] == ["/?"] goto:p_help
|
||||||
doskey /macrofile=%~dp0..\config\aliases
|
if ["%2"] == [""] echo Insufficient parameters. & goto:p_help
|
||||||
|
::validate alias
|
||||||
|
setlocal
|
||||||
|
for /f "delims== tokens=1" %%G in ("%*") do set _temp2=%%G
|
||||||
|
|
||||||
|
set _temp=%_temp2: =%
|
||||||
|
|
||||||
|
if not ["%_temp%"] == ["%_temp2%"] (
|
||||||
|
echo Your alias name can not contain a space
|
||||||
|
endlocal
|
||||||
|
goto:eof
|
||||||
|
)
|
||||||
|
|
||||||
|
echo %* >> "%CMDER_ROOT%\config\aliases"
|
||||||
|
doskey /macrofile="%CMDER_ROOT%\config\aliases"
|
||||||
echo Alias created
|
echo Alias created
|
||||||
|
endlocal
|
||||||
|
goto:eof
|
||||||
|
|
||||||
|
:p_help
|
||||||
|
echo.Usage:
|
||||||
|
echo. alias name=full command
|
||||||
|
echo. $* allows the alias to assume all the parameters of the supplied command.
|
||||||
|
echo. $1-$9 Allows you to seperate parameter by number, much like %%1 in batch.
|
||||||
|
echo. $T is the command seperator, allowing you to string several commands together into one alias.
|
||||||
|
echo. For more information, read DOSKEY/?
|
||||||
|
110
build.rb
Normal file
110
build.rb
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Samuel Vasko 2013
|
||||||
|
# Cmder build script
|
||||||
|
# Like really a beta
|
||||||
|
#
|
||||||
|
# This script downloads dependencies form google code. Each software is extracted
|
||||||
|
# in a folder with same name as the project on google code. So Conemu becomes
|
||||||
|
# conemu-maximus5. Correct files are beeing picked by using labels.
|
||||||
|
# I will move the script for getting files by labels from php to here as soon I feel like it
|
||||||
|
|
||||||
|
require 'fileutils'
|
||||||
|
require 'open-uri'
|
||||||
|
require 'uri'
|
||||||
|
|
||||||
|
def get_file project, query
|
||||||
|
urlToFile = URI.escape('http://samuelvasko.tk/gcode/?project='+project+'&query='+query)
|
||||||
|
open(urlToFile) do |resp|
|
||||||
|
urlToFile = URI.escape(resp.read.split(/\r?\n/).first)
|
||||||
|
end
|
||||||
|
|
||||||
|
extension = urlToFile.split('.').last
|
||||||
|
filename = project+'.'+extension
|
||||||
|
|
||||||
|
puts "\n ------ Downloading #{project} from #{urlToFile} ------- \n \n"
|
||||||
|
begin
|
||||||
|
open(urlToFile, 'rb') do |infile|
|
||||||
|
open(filename, 'wb') do |outfile|
|
||||||
|
outfile.write(infile.read)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rescue IOError => error
|
||||||
|
puts error
|
||||||
|
FileUtils.rm(filename) if File.exists?(filename)
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
system("7z x -o\"#{project}\" #{filename}")
|
||||||
|
|
||||||
|
File.unlink(project+"."+extension);
|
||||||
|
|
||||||
|
# When the folder contains another folder
|
||||||
|
# that is not what we want
|
||||||
|
if Dir.glob("#{project}/*").length == 1
|
||||||
|
temp_name = "#{project}_temp"
|
||||||
|
FileUtils.mv(project, temp_name)
|
||||||
|
FileUtils.mv(Dir.glob("#{temp_name}/*")[0], project)
|
||||||
|
FileUtils.rm_r(temp_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_on_path exe
|
||||||
|
path = ENV['PATH'].split(File::PATH_SEPARATOR)
|
||||||
|
for dir in path
|
||||||
|
if File.exists?(File.join(dir, exe))
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
puts '
|
||||||
|
______ _ _ _ _ _
|
||||||
|
| ___ \ (_) | | (_) | |
|
||||||
|
| |_/ /_ _ _| | __| |_ _ __ __ _ ___ _ __ ___ __| | ___ _ __
|
||||||
|
| ___ \ | | | | |/ _` | | \'_ \ / _` | / __| \'_ ` _ \ / _` |/ _ \ \'__|
|
||||||
|
| |_/ / |_| | | | (_| | | | | | (_| | | (__| | | | | | (_| | __/ |
|
||||||
|
\____/ \__,_|_|_|\__,_|_|_| |_|\__, | \___|_| |_| |_|\__,_|\___|_|
|
||||||
|
__/ |
|
||||||
|
|___/
|
||||||
|
'
|
||||||
|
|
||||||
|
unless find_on_path('7z.exe')
|
||||||
|
puts '7z.exe not found. Ensure 7-zip is installed and on the PATH.'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
build_exe = true
|
||||||
|
unless find_on_path('msbuild.exe')
|
||||||
|
puts 'msbuild.exe not found. We need that to build the executable.'
|
||||||
|
puts 'Do you want to continue? [Y/n]'
|
||||||
|
build_exe = false
|
||||||
|
exit(1) unless gets.chomp.downcase == 'y'
|
||||||
|
end
|
||||||
|
|
||||||
|
puts 'Cleanup'
|
||||||
|
|
||||||
|
if Dir.exists?('vendor')
|
||||||
|
Dir.glob('vendor/*') { |file| FileUtils.rm_rf(file) if File.directory?(file) }
|
||||||
|
end
|
||||||
|
|
||||||
|
Dir.chdir('vendor')
|
||||||
|
|
||||||
|
puts 'Getting files'
|
||||||
|
|
||||||
|
get_file('clink', 'label:Type-Archive label:Featured')
|
||||||
|
get_file('conemu-maximus5', 'label:Type-Archive label:Preview label:Featured')
|
||||||
|
get_file('msysgit', 'label:Type-Archive label:Featured')
|
||||||
|
|
||||||
|
puts 'Creating executable'
|
||||||
|
|
||||||
|
if build_exe
|
||||||
|
Dir.chdir('../launcher')
|
||||||
|
status = system('msbuild /p:Configuration=Release')
|
||||||
|
unless status
|
||||||
|
puts 'Looks like the build failied'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
puts 'Done, bye'
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<key name="Software">
|
<key name="Software">
|
||||||
<key name="ConEmu">
|
<key name="ConEmu">
|
||||||
<key name=".Vanilla" modified="2013-07-16 16:32:45">
|
<key name=".Vanilla" modified="2013-11-29 16:19:40" build="131107">
|
||||||
<value name="ColorTable00" type="dword" data="00222827"/>
|
<value name="ColorTable00" type="dword" data="00222827"/>
|
||||||
<value name="ColorTable01" type="dword" data="009e5401"/>
|
<value name="ColorTable01" type="dword" data="009e5401"/>
|
||||||
<value name="ColorTable02" type="dword" data="0004aa74"/>
|
<value name="ColorTable02" type="dword" data="0004aa74"/>
|
||||||
@ -77,7 +77,7 @@
|
|||||||
<value name="StartFarEditors" type="hex" data="00"/>
|
<value name="StartFarEditors" type="hex" data="00"/>
|
||||||
<value name="StoreTaskbarkTasks" type="hex" data="00"/>
|
<value name="StoreTaskbarkTasks" type="hex" data="00"/>
|
||||||
<value name="StoreTaskbarCommands" type="hex" data="00"/>
|
<value name="StoreTaskbarCommands" type="hex" data="00"/>
|
||||||
<value name="CmdLineHistory" type="multi"><line data=";C:\Users\bliker\Desktop\cmder\lib\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\"/></value>
|
<value name="CmdLineHistory" type="multi"><line data=";C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\"/></value>
|
||||||
<value name="SingleInstance" type="hex" data="00"/>
|
<value name="SingleInstance" type="hex" data="00"/>
|
||||||
<value name="ShowHelpTooltips" type="hex" data="01"/>
|
<value name="ShowHelpTooltips" type="hex" data="01"/>
|
||||||
<value name="Multi" type="hex" data="01"/>
|
<value name="Multi" type="hex" data="01"/>
|
||||||
@ -125,10 +125,10 @@
|
|||||||
<value name="UseCurrentSizePos" type="hex" data="01"/>
|
<value name="UseCurrentSizePos" type="hex" data="01"/>
|
||||||
<value name="WindowMode" type="dword" data="0000051f"/>
|
<value name="WindowMode" type="dword" data="0000051f"/>
|
||||||
<value name="ConWnd Width" type="dword" data="0000006f"/>
|
<value name="ConWnd Width" type="dword" data="0000006f"/>
|
||||||
<value name="ConWnd Height" type="dword" data="00000026"/>
|
<value name="ConWnd Height" type="dword" data="0000001a"/>
|
||||||
<value name="Cascaded" type="hex" data="01"/>
|
<value name="Cascaded" type="hex" data="01"/>
|
||||||
<value name="ConWnd X" type="dword" data="00000108"/>
|
<value name="ConWnd X" type="dword" data="000000bc"/>
|
||||||
<value name="ConWnd Y" type="dword" data="000000c1"/>
|
<value name="ConWnd Y" type="dword" data="00000065"/>
|
||||||
<value name="16bit Height" type="dword" data="00000000"/>
|
<value name="16bit Height" type="dword" data="00000000"/>
|
||||||
<value name="AutoSaveSizePos" type="hex" data="00"/>
|
<value name="AutoSaveSizePos" type="hex" data="00"/>
|
||||||
<value name="IntegralSize" type="hex" data="00"/>
|
<value name="IntegralSize" type="hex" data="00"/>
|
||||||
@ -193,7 +193,7 @@
|
|||||||
<value name="FARuseASCIIsort" type="hex" data="00"/>
|
<value name="FARuseASCIIsort" type="hex" data="00"/>
|
||||||
<value name="ShellNoZoneCheck" type="hex" data="00"/>
|
<value name="ShellNoZoneCheck" type="hex" data="00"/>
|
||||||
<value name="FixAltOnAltTab" type="hex" data="00"/>
|
<value name="FixAltOnAltTab" type="hex" data="00"/>
|
||||||
<value name="DisableMouse" type="hex" data="00"/>
|
<value name="DisableMouse" type="hex" data="01"/>
|
||||||
<value name="RSelectionFix" type="hex" data="01"/>
|
<value name="RSelectionFix" type="hex" data="01"/>
|
||||||
<value name="MouseSkipActivation" type="hex" data="01"/>
|
<value name="MouseSkipActivation" type="hex" data="01"/>
|
||||||
<value name="MouseSkipMoving" type="hex" data="01"/>
|
<value name="MouseSkipMoving" type="hex" data="01"/>
|
||||||
@ -249,7 +249,7 @@
|
|||||||
<value name="StatusBar.Hide.Proc" type="hex" data="00"/>
|
<value name="StatusBar.Hide.Proc" type="hex" data="00"/>
|
||||||
<value name="StatusBar.Hide.Title" type="hex" data="01"/>
|
<value name="StatusBar.Hide.Title" type="hex" data="01"/>
|
||||||
<value name="StatusBar.Hide.Resize" type="hex" data="00"/>
|
<value name="StatusBar.Hide.Resize" type="hex" data="00"/>
|
||||||
<value name="Tabs" type="hex" data="02"/>
|
<value name="Tabs" type="hex" data="01"/>
|
||||||
<value name="TabsLocation" type="hex" data="01"/>
|
<value name="TabsLocation" type="hex" data="01"/>
|
||||||
<value name="TabSelf" type="hex" data="01"/>
|
<value name="TabSelf" type="hex" data="01"/>
|
||||||
<value name="TabLazy" type="hex" data="01"/>
|
<value name="TabLazy" type="hex" data="01"/>
|
||||||
@ -329,7 +329,7 @@
|
|||||||
<value name="Update.CheckOnStartup" type="hex" data="01"/>
|
<value name="Update.CheckOnStartup" type="hex" data="01"/>
|
||||||
<value name="Update.CheckHourly" type="hex" data="00"/>
|
<value name="Update.CheckHourly" type="hex" data="00"/>
|
||||||
<value name="Update.ConfirmDownload" type="hex" data="01"/>
|
<value name="Update.ConfirmDownload" type="hex" data="01"/>
|
||||||
<value name="Update.UseBuilds" type="hex" data="02"/>
|
<value name="Update.UseBuilds" type="hex" data="01"/>
|
||||||
<value name="Update.UseProxy" type="hex" data="00"/>
|
<value name="Update.UseProxy" type="hex" data="00"/>
|
||||||
<value name="Update.Proxy" type="string" data=""/>
|
<value name="Update.Proxy" type="string" data=""/>
|
||||||
<value name="Update.ProxyUser" type="string" data=""/>
|
<value name="Update.ProxyUser" type="string" data=""/>
|
||||||
@ -411,9 +411,9 @@
|
|||||||
<value name="Key.JumpNextMonitor" type="dword" data="80808000"/>
|
<value name="Key.JumpNextMonitor" type="dword" data="80808000"/>
|
||||||
<value name="Key.TileToLeft" type="dword" data="80808000"/>
|
<value name="Key.TileToLeft" type="dword" data="80808000"/>
|
||||||
<value name="Key.TileToRIght" type="dword" data="80808000"/>
|
<value name="Key.TileToRIght" type="dword" data="80808000"/>
|
||||||
<value name="KeyMacro01" type="dword" data="00121131"/>
|
<value name="KeyMacro01" type="dword" data="0012a031"/>
|
||||||
<value name="KeyMacro01.Text" type="string" data="Task("cmd")"/>
|
<value name="KeyMacro01.Text" type="string" data="Task("cmd")"/>
|
||||||
<value name="KeyMacro02" type="dword" data="00121132"/>
|
<value name="KeyMacro02" type="dword" data="0012a032"/>
|
||||||
<value name="KeyMacro02.Text" type="string" data="Task("PowerShell")"/>
|
<value name="KeyMacro02.Text" type="string" data="Task("PowerShell")"/>
|
||||||
<value name="KeyMacro03" type="dword" data="00000000"/>
|
<value name="KeyMacro03" type="dword" data="00000000"/>
|
||||||
<value name="KeyMacro03.Text" type="string" data=""/>
|
<value name="KeyMacro03.Text" type="string" data=""/>
|
||||||
@ -483,28 +483,30 @@
|
|||||||
<value name="DndLKey" type="hex" data="00"/>
|
<value name="DndLKey" type="hex" data="00"/>
|
||||||
<value name="DndRKey" type="hex" data="a2"/>
|
<value name="DndRKey" type="hex" data="a2"/>
|
||||||
<value name="WndDragKey" type="dword" data="00121101"/>
|
<value name="WndDragKey" type="dword" data="00121101"/>
|
||||||
<key name="Tasks" modified="2013-07-16 16:32:45">
|
<key name="Tasks" modified="2013-11-29 16:19:41" build="131107">
|
||||||
<value name="Count" type="dword" data="00000002"/>
|
<value name="Count" type="dword" data="00000002"/>
|
||||||
<key name="Task1" modified="2013-07-16 16:32:45">
|
<key name="Task1" modified="2013-11-29 16:19:41" build="131107">
|
||||||
<value name="Name" type="string" data="{cmd}"/>
|
<value name="Name" type="string" data="{cmd}"/>
|
||||||
<value name="GuiArgs" type="string" data=" /icon "cmd.exe""/>
|
<value name="GuiArgs" type="string" data=" /icon "cmd.exe""/>
|
||||||
<value name="Cmd1" type="string" data="cmd /k vendor\init.bat"/>
|
<value name="Cmd1" type="string" data="cmd /k "%CMDER_ROOT%\vendor\init.bat" -new_console:d:%USERPROFILE%"/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="dword" data="00000000"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="dword" data="00000001"/>
|
||||||
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Task2" modified="2013-07-16 16:32:45">
|
<key name="Task2" modified="2013-11-29 16:19:41" build="131107">
|
||||||
<value name="Name" type="string" data="{PowerShell}"/>
|
<value name="Name" type="string" data="{PowerShell}"/>
|
||||||
<value name="GuiArgs" type="string" data="/dir "%userprofile%""/>
|
<value name="GuiArgs" type="string" data="/dir "%userprofile%""/>
|
||||||
<value name="Cmd1" type="string" data="powershell"/>
|
<value name="Cmd1" type="string" data="powershell"/>
|
||||||
<value name="Active" type="dword" data="00000000"/>
|
<value name="Active" type="dword" data="00000000"/>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="dword" data="00000001"/>
|
||||||
|
<value name="Hotkey" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
</key>
|
</key>
|
||||||
<key name="Apps" modified="2013-07-16 16:32:45">
|
<key name="Apps" modified="2013-11-29 16:19:41" build="131107">
|
||||||
<value name="Count" type="dword" data="00000000"/>
|
<value name="Count" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
<key name="Colors" modified="2013-07-16 16:32:45">
|
<key name="Colors" modified="2013-11-29 16:19:41" build="131107">
|
||||||
<key name="Palette1" modified="2013-07-16 16:32:45">
|
<key name="Palette1" modified="2013-11-29 16:19:41" build="131107">
|
||||||
<value name="Name" type="string" data="Monokai"/>
|
<value name="Name" type="string" data="Monokai"/>
|
||||||
<value name="ExtendColors" type="hex" data="00"/>
|
<value name="ExtendColors" type="hex" data="00"/>
|
||||||
<value name="ExtendColorIdx" type="hex" data="0e"/>
|
<value name="ExtendColorIdx" type="hex" data="0e"/>
|
||||||
@ -547,6 +549,30 @@
|
|||||||
</key>
|
</key>
|
||||||
<value name="Count" type="dword" data="00000001"/>
|
<value name="Count" type="dword" data="00000001"/>
|
||||||
</key>
|
</key>
|
||||||
|
<value name="OneTabPerGroup" type="hex" data="00"/>
|
||||||
|
<value name="ActivateSplitMouseOver" type="hex" data="01"/>
|
||||||
|
<value name="TabBtnDblClick" type="dword" data="00000000"/>
|
||||||
|
<value name="ConsoleExceptionHandler" type="hex" data="00"/>
|
||||||
|
<value name="SaveCmdHistory" type="hex" data="00"/>
|
||||||
|
<value name="CTS.IBeam" type="hex" data="01"/>
|
||||||
|
<value name="Multi.SplitSizeVU" type="dword" data="00105d26"/>
|
||||||
|
<value name="Multi.SplitSizeVD" type="dword" data="00105d28"/>
|
||||||
|
<value name="Multi.SplitSizeHL" type="dword" data="00105d25"/>
|
||||||
|
<value name="Multi.SplitSizeHR" type="dword" data="00105d27"/>
|
||||||
|
<value name="Multi.SplitFocusU" type="dword" data="00005d26"/>
|
||||||
|
<value name="Multi.SplitFocusD" type="dword" data="00005d28"/>
|
||||||
|
<value name="Multi.SplitFocusL" type="dword" data="00005d25"/>
|
||||||
|
<value name="Multi.SplitFocusR" type="dword" data="00005d27"/>
|
||||||
|
<value name="CloseGroupPrcKey" type="dword" data="00000000"/>
|
||||||
|
<value name="SetDefaultTerminalStartupTSA" type="hex" data="01"/>
|
||||||
|
<value name="CTS.HtmlFormat" type="hex" data="00"/>
|
||||||
|
<value name="TabIcons" type="hex" data="01"/>
|
||||||
|
<value name="Multi.NewConsolePopup2" type="dword" data="00000000"/>
|
||||||
|
<value name="CloseAllConKey" type="dword" data="00000000"/>
|
||||||
|
<value name="CloseExceptConKey" type="dword" data="00000000"/>
|
||||||
|
<value name="CTS.VkCopyFmt0" type="dword" data="00001143"/>
|
||||||
|
<value name="CTS.VkCopyFmt1" type="dword" data="00101143"/>
|
||||||
|
<value name="CTS.VkCopyFmt2" type="dword" data="00000000"/>
|
||||||
</key>
|
</key>
|
||||||
</key>
|
</key>
|
||||||
</key>
|
</key>
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
e.=explorer .
|
e.=explorer .
|
||||||
gl=git log --oneline --all --graph --decorate
|
gl=git log --oneline --all --graph --decorate $*
|
||||||
hej=dir
|
ls=ls --color $*
|
||||||
|
pwd=cd
|
||||||
|
50
config/git.lua
Normal file
50
config/git.lua
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
-- Find out current branch
|
||||||
|
-- @return {false|git branch name}
|
||||||
|
---
|
||||||
|
function get_git_branch()
|
||||||
|
for line in io.popen("git branch 2>nul"):lines() do
|
||||||
|
local m = line:match("%* (.+)$")
|
||||||
|
if m then
|
||||||
|
return m
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Get the status of working dir
|
||||||
|
-- @return {bool}
|
||||||
|
---
|
||||||
|
function get_git_status()
|
||||||
|
return os.execute("git diff --quiet --ignore-submodules HEAD")
|
||||||
|
end
|
||||||
|
|
||||||
|
function git_prompt_filter()
|
||||||
|
|
||||||
|
-- Colors for git status
|
||||||
|
local colors = {
|
||||||
|
clean = "\x1b[1;37;40m",
|
||||||
|
dirty = "\x1b[31;1m",
|
||||||
|
}
|
||||||
|
|
||||||
|
local branch = get_git_branch()
|
||||||
|
if branch then
|
||||||
|
-- Has branch => therefore it is a git folder, now figure out status
|
||||||
|
if get_git_status() then
|
||||||
|
color = colors.clean
|
||||||
|
else
|
||||||
|
color = colors.dirty
|
||||||
|
end
|
||||||
|
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..branch..")")
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- No git present or not in git file
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", "")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
clink.prompt.register_filter(git_prompt_filter, 50)
|
5
config/prompt.lua
Normal file
5
config/prompt.lua
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
function lambda_prompt_filter()
|
||||||
|
clink.prompt.value = string.gsub(clink.prompt.value, "{lamb}", "λ")
|
||||||
|
end
|
||||||
|
|
||||||
|
clink.prompt.register_filter(lambda_prompt_filter, 40)
|
BIN
icons/cmder.ico
Normal file
BIN
icons/cmder.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
icons/cmder_icon.psd
Normal file
BIN
icons/cmder_icon.psd
Normal file
Binary file not shown.
BIN
icons/icon_16.png
Normal file
BIN
icons/icon_16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
icons/icon_256.png
Normal file
BIN
icons/icon_256.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
BIN
icons/icon_32.png
Normal file
BIN
icons/icon_32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
icons/icon_48.png
Normal file
BIN
icons/icon_48.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
181
launcher/.gitignore
vendored
Normal file
181
launcher/.gitignore
vendored
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.sln.docstates
|
||||||
|
*.filters
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
x64/
|
||||||
|
build/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
|
||||||
|
# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
|
||||||
|
!packages/*/build/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
#NUNIT
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_i.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# JustCode is a .NET coding addin-in
|
||||||
|
.JustCode
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
*.ncrunch*
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.Publish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
|
||||||
|
# NuGet Packages Directory
|
||||||
|
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
|
||||||
|
#packages/
|
||||||
|
## TODO: If the tool you use requires repositories.config, also uncomment the next line
|
||||||
|
#!packages/repositories.config
|
||||||
|
|
||||||
|
# Windows Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Windows Store app package directory
|
||||||
|
AppPackages/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
sql/
|
||||||
|
*.Cache
|
||||||
|
ClientBin/
|
||||||
|
[Ss]tyle[Cc]op.*
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file to a newer
|
||||||
|
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
App_Data/*.mdf
|
||||||
|
App_Data/*.ldf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Windows detritus
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
# Windows image file caches
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
22
launcher/CmderLauncher.sln
Normal file
22
launcher/CmderLauncher.sln
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2013
|
||||||
|
VisualStudioVersion = 12.0.21005.1
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CmderLauncher", "CmderLauncher.vcxproj", "{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
98
launcher/CmderLauncher.vcxproj
Normal file
98
launcher/CmderLauncher.vcxproj
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>CmderLauncher</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<TargetName>Cmder</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetName>Cmder</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MinSpace</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>false</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(TargetPath) $(SolutionDir)..\$(TargetFileName)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="src\Resource.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="src\resource.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="src\CmderLauncher.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
231
launcher/src/CmderLauncher.cpp
Normal file
231
launcher/src/CmderLauncher.cpp
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
#include <windows.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
#include <Shlwapi.h>
|
||||||
|
#include "resource.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#pragma comment(lib, "Shlwapi.lib")
|
||||||
|
|
||||||
|
#ifndef UNICODE
|
||||||
|
#error "Must be compiled with unicode support."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define USE_TASKBAR_API (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
|
||||||
|
|
||||||
|
#define MB_TITLE L"Cmder Launcher"
|
||||||
|
#define SHELL_MENU_REGISTRY_PATH L"Directory\\Background\\shell\\Cmder"
|
||||||
|
|
||||||
|
#define streqi(a, b) (_wcsicmp((a), (b)) == 0)
|
||||||
|
|
||||||
|
#define WIDEN2(x) L ## x
|
||||||
|
#define WIDEN(x) WIDEN2(x)
|
||||||
|
#define __WFUNCTION__ WIDEN(__FUNCTION__)
|
||||||
|
|
||||||
|
#define FAIL_ON_ERROR(x) { DWORD ec; if ((ec = (x)) != ERROR_SUCCESS) { ShowErrorAndExit(ec, __WFUNCTION__, __LINE__); } }
|
||||||
|
|
||||||
|
void ShowErrorAndExit(DWORD ec, const wchar_t * func, int line)
|
||||||
|
{
|
||||||
|
wchar_t * buffer;
|
||||||
|
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL, ec, 0, (LPWSTR) &buffer, 0, NULL) == 0)
|
||||||
|
{
|
||||||
|
buffer = L"Unknown error. FormatMessage failed.";
|
||||||
|
}
|
||||||
|
|
||||||
|
wchar_t message[1024];
|
||||||
|
swprintf_s(message, L"%s\nFunction: %s\nLine: %d", buffer, func, line);
|
||||||
|
LocalFree(buffer);
|
||||||
|
|
||||||
|
MessageBox(NULL, message, MB_TITLE, MB_OK | MB_ICONERROR);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct _option
|
||||||
|
{
|
||||||
|
std::wstring name;
|
||||||
|
bool hasVal;
|
||||||
|
std::wstring value;
|
||||||
|
bool set;
|
||||||
|
} option;
|
||||||
|
|
||||||
|
typedef std::pair<std::wstring, std::wstring> optpair;
|
||||||
|
|
||||||
|
|
||||||
|
optpair GetOption()
|
||||||
|
{
|
||||||
|
wchar_t * cmd = GetCommandLine();
|
||||||
|
int argc;
|
||||||
|
wchar_t ** argv = CommandLineToArgvW(cmd, &argc);
|
||||||
|
optpair pair;
|
||||||
|
|
||||||
|
if (argc == 1)
|
||||||
|
{
|
||||||
|
pair = optpair(L"/START", L"");
|
||||||
|
}
|
||||||
|
else if (argc == 2 && argv[1][0] != L'/')
|
||||||
|
{
|
||||||
|
pair = optpair(L"/START", argv[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pair = optpair(argv[1], argc > 2 ? argv[2] : L"");
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalFree(argv);
|
||||||
|
|
||||||
|
return pair;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartCmder(std::wstring path)
|
||||||
|
{
|
||||||
|
#if USE_TASKBAR_API
|
||||||
|
wchar_t appId[MAX_PATH] = { 0 };
|
||||||
|
#endif
|
||||||
|
wchar_t exeDir[MAX_PATH] = { 0 };
|
||||||
|
wchar_t icoPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t cfgPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t conEmuPath[MAX_PATH] = { 0 };
|
||||||
|
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
|
||||||
|
|
||||||
|
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
|
||||||
|
|
||||||
|
#if USE_TASKBAR_API
|
||||||
|
wcscpy_s(appId, exeDir);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PathRemoveFileSpec(exeDir);
|
||||||
|
|
||||||
|
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
|
||||||
|
PathCombine(cfgPath, exeDir, L"config\\ConEmu.xml");
|
||||||
|
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
||||||
|
|
||||||
|
swprintf_s(args, L"/Icon \"%s\" /Title Cmder /LoadCfgFile \"%s\"", icoPath, cfgPath);
|
||||||
|
|
||||||
|
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||||
|
SetEnvironmentVariable(L"CMDER_START", path.c_str());
|
||||||
|
|
||||||
|
STARTUPINFO si = { 0 };
|
||||||
|
si.cb = sizeof(STARTUPINFO);
|
||||||
|
#if USE_TASKBAR_API
|
||||||
|
si.lpTitle = appId;
|
||||||
|
si.dwFlags = STARTF_TITLEISAPPID;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PROCESS_INFORMATION pi;
|
||||||
|
|
||||||
|
CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsUserOnly(std::wstring opt)
|
||||||
|
{
|
||||||
|
bool userOnly;
|
||||||
|
|
||||||
|
if (streqi(opt.c_str(), L"ALL"))
|
||||||
|
{
|
||||||
|
userOnly = false;
|
||||||
|
}
|
||||||
|
else if (streqi(opt.c_str(), L"USER"))
|
||||||
|
{
|
||||||
|
userOnly = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox(NULL, L"Unrecognized option for /REGISTER or /UNREGISTER. Must be either ALL or USER.", MB_TITLE, MB_OK);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return userOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
HKEY GetRootKey(std::wstring opt)
|
||||||
|
{
|
||||||
|
HKEY root;
|
||||||
|
|
||||||
|
if (IsUserOnly(opt))
|
||||||
|
{
|
||||||
|
FAIL_ON_ERROR(RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, NULL,
|
||||||
|
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &root, NULL));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
root = HKEY_CLASSES_ROOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterShellMenu(std::wstring opt)
|
||||||
|
{
|
||||||
|
HKEY root = GetRootKey(opt);
|
||||||
|
|
||||||
|
HKEY cmderKey;
|
||||||
|
FAIL_ON_ERROR(
|
||||||
|
RegCreateKeyEx(root, SHELL_MENU_REGISTRY_PATH, 0, NULL,
|
||||||
|
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||||
|
|
||||||
|
FAIL_ON_ERROR(RegSetValue(cmderKey, L"", REG_SZ, L"Cmder Here", NULL));
|
||||||
|
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"NoWorkingDirectory", 0, REG_SZ, (BYTE *)L"", 2));
|
||||||
|
|
||||||
|
HKEY command;
|
||||||
|
FAIL_ON_ERROR(
|
||||||
|
RegCreateKeyEx(cmderKey, L"command", 0, NULL,
|
||||||
|
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &command, NULL));
|
||||||
|
|
||||||
|
wchar_t exePath[MAX_PATH] = { 0 };
|
||||||
|
|
||||||
|
GetModuleFileName(NULL, exePath, sizeof(exePath));
|
||||||
|
|
||||||
|
wchar_t commandStr[MAX_PATH + 20] = { 0 };
|
||||||
|
swprintf_s(commandStr, L"\"%s\" \"%%V\"", exePath);
|
||||||
|
|
||||||
|
FAIL_ON_ERROR(RegSetValue(command, L"", REG_SZ, commandStr, NULL));
|
||||||
|
|
||||||
|
RegCloseKey(command);
|
||||||
|
RegCloseKey(cmderKey);
|
||||||
|
RegCloseKey(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UnregisterShellMenu(std::wstring opt)
|
||||||
|
{
|
||||||
|
HKEY root = GetRootKey(opt);
|
||||||
|
HKEY cmderKey;
|
||||||
|
FAIL_ON_ERROR(
|
||||||
|
RegCreateKeyEx(root, SHELL_MENU_REGISTRY_PATH, 0, NULL,
|
||||||
|
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||||
|
FAIL_ON_ERROR(RegDeleteTree(cmderKey, NULL));
|
||||||
|
FAIL_ON_ERROR(RegDeleteKey(root, SHELL_MENU_REGISTRY_PATH));
|
||||||
|
RegCloseKey(cmderKey);
|
||||||
|
RegCloseKey(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||||
|
_In_opt_ HINSTANCE hPrevInstance,
|
||||||
|
_In_ LPTSTR lpCmdLine,
|
||||||
|
_In_ int nCmdShow)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||||
|
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||||
|
UNREFERENCED_PARAMETER(nCmdShow);
|
||||||
|
|
||||||
|
optpair opt = GetOption();
|
||||||
|
|
||||||
|
if (streqi(opt.first.c_str(), L"/START"))
|
||||||
|
{
|
||||||
|
StartCmder(opt.second);
|
||||||
|
}
|
||||||
|
else if (streqi(opt.first.c_str(), L"/REGISTER"))
|
||||||
|
{
|
||||||
|
RegisterShellMenu(opt.second);
|
||||||
|
}
|
||||||
|
else if (streqi(opt.first.c_str(), L"/UNREGISTER"))
|
||||||
|
{
|
||||||
|
UnregisterShellMenu(opt.second);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n /START <path>\n /REGISTER [USER/ALL]\n /UNREGISTER [USER/ALL]", MB_TITLE, MB_OK);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
BIN
launcher/src/Resource.rc
Normal file
BIN
launcher/src/Resource.rc
Normal file
Binary file not shown.
BIN
launcher/src/resource.h
Normal file
BIN
launcher/src/resource.h
Normal file
Binary file not shown.
40
pack.rb
Normal file
40
pack.rb
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Samuel Vasko 2013
|
||||||
|
# Cmder packing script -- Creates zip files for relase
|
||||||
|
|
||||||
|
require "fileutils"
|
||||||
|
|
||||||
|
def create_archive name, exclude
|
||||||
|
if exclude
|
||||||
|
exclude = " -x!cmder\\" + exclude
|
||||||
|
else
|
||||||
|
exclude = ""
|
||||||
|
end
|
||||||
|
system('ls')
|
||||||
|
puts "Running 7z a -x@cmder\\packignore" + exclude + " " + name + " cmder"
|
||||||
|
system("7z a -x@cmder\\packignore" + exclude + " " + name + " cmder")
|
||||||
|
end
|
||||||
|
|
||||||
|
targets = [
|
||||||
|
["cmder.zip"],
|
||||||
|
["cmder.7z"],
|
||||||
|
["cmder_mini.zip", "vendor\\msysgit"]
|
||||||
|
]
|
||||||
|
|
||||||
|
unless system("git describe --abbrev=0 --tags")
|
||||||
|
puts "Failied to get the last tag from git, looks like something is missing"
|
||||||
|
end
|
||||||
|
|
||||||
|
version = `git describe --abbrev=0 --tags`
|
||||||
|
|
||||||
|
FileUtils.touch('Version ' + version.chomp)
|
||||||
|
FileUtils.rm('config/.history')
|
||||||
|
|
||||||
|
Dir.chdir('..')
|
||||||
|
|
||||||
|
targets.each do |ar|
|
||||||
|
create_archive ar[0], ar[1]
|
||||||
|
end
|
||||||
|
|
||||||
|
Dir.chdir('cmder')
|
||||||
|
|
||||||
|
FileUtils.rm('Version ' + version.chomp)
|
8
packignore
Normal file
8
packignore
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
cmder\launcher
|
||||||
|
cmder\icons
|
||||||
|
cmder\.gitignore
|
||||||
|
cmder\.gitattributes
|
||||||
|
cmder\.git
|
||||||
|
cmder\*.rb
|
||||||
|
cmder\packignore
|
||||||
|
cmder\Cmder.bat
|
2
vendor/Readme.md
vendored
2
vendor/Readme.md
vendored
@ -1,3 +1,3 @@
|
|||||||
## Vendor
|
## Vendor
|
||||||
|
|
||||||
Softwere from third parties + init sctipt
|
Software from third parties + init sctipt
|
||||||
|
30
vendor/init.bat
vendored
30
vendor/init.bat
vendored
@ -1,25 +1,35 @@
|
|||||||
@echo off
|
:: Init Script for cmd.exe
|
||||||
|
:: Sets some nice defaults
|
||||||
|
:: Created as part of cmder project
|
||||||
|
|
||||||
:: Set prompt style
|
:: Change the prompt style
|
||||||
prompt $E[1;32;40m$P $_$E[1;30;40m$$ $E[0m
|
:: Mmm tasty lamb
|
||||||
|
@prompt $E[1;32;40m$P$S{git}$S$_$E[1;30;40m{lamb}$S$E[0m
|
||||||
|
|
||||||
:: Pick right version of clink
|
:: Pick right version of clink
|
||||||
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
@if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||||
set architecture=86
|
set architecture=86
|
||||||
) else (
|
) else (
|
||||||
set architecture=64
|
set architecture=64
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Run clink
|
:: Run clink
|
||||||
vendor\clink\clink_x%architecture%.exe inject --quiet --profile config
|
@"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config"
|
||||||
|
|
||||||
set rootDir=%CD%
|
:: Prepare for msysgit
|
||||||
|
|
||||||
|
:: I do not even know, copypasted from their .bat
|
||||||
|
@set PLINK_PROTOCOL=ssh
|
||||||
|
@if not defined TERM set TERM=cygwin
|
||||||
|
|
||||||
:: Enhance Path
|
:: Enhance Path
|
||||||
PATH=%PATH%;%rootDir%\bin
|
@set git_install_root=%CMDER_ROOT%\vendor\msysgit
|
||||||
|
@set PATH=%PATH%;%CMDER_ROOT%\bin;%git_install_root%\bin;%git_install_root%\mingw\bin;%git_install_root%\cmd;%git_install_root%\share\vim\vim73;
|
||||||
|
|
||||||
:: Add aliases
|
:: Add aliases
|
||||||
doskey /macrofile=%rootDir%\config\aliases
|
@doskey /macrofile="%CMDER_ROOT%\config\aliases"
|
||||||
|
|
||||||
:: cd into users homedir
|
:: Set home path
|
||||||
cd /d "%userprofile%"
|
@set HOME=%USERPROFILE%
|
||||||
|
|
||||||
|
@if defined CMDER_START cd /d "%CMDER_START%"
|
||||||
|
Reference in New Issue
Block a user