digitalmars.D - Port of the maximize plugin for GVim by kAtremer (2007) in D.
- Tim Moldazhan (126/126) Aug 04 **dub.json:**
**dub.json:** ```json { "name": "maximize", "targetType": "dynamicLibrary", "sourceFiles": ["source/maximize.d"], "dependencies": {}, "libs":["user32","kernel32"] } ``` **maximize.d:** ```d module maximize; import core.sys.windows.windows; import core.sys.windows.windef; import core.sys.windows.winnt; import core.stdc.string; import std.string; extern (Windows) BOOL DllMain( HMODULE hModule, DWORD ul_reason_for_call,LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; default:break; } return TRUE; } extern(C) int strcmp(const(char)* s1, const(char)* s2); extern (Windows) BOOL EnumThreadWndProc(HWND hwnd, LPARAM lParam) { HWND* pVimWin = cast(HWND*) lParam; char[256] className; GetClassNameA(hwnd, cast(LPSTR)className.ptr, cast(int)className.length); if (strcmp(className.toStringz(), "Vim") == 0 || strcmp(className.toStringz, "GVim") == 0) { *pVimWin = hwnd; OutputDebugString("Found Vim/GVim window\n"); return FALSE; // Stop enumeration } return TRUE; // Continue enumeration } extern (C) export LONG Maximize(LONG param) { HWND vimwin = null; DWORD threadid = GetCurrentThreadId(); OutputDebugString("Starting EnumThreadWindows\n"); // Enumerate all windows in the current thread EnumThreadWindows(threadid, cast(WNDENUMPROC)&EnumThreadWndProc, cast(LPARAM)&vimwin); if (vimwin != null) { OutputDebugString("Vim/GVim window found\n"); if (param == 1) { ShowWindow(vimwin, SW_MAXIMIZE); // Maximize window } else if (param == 0) { ShowWindow(vimwin, SW_RESTORE); // Restore window } return 1; // Success } else { OutputDebugString("Vim/GVim window not found\n"); return 0; // Failure: Vim window not found } } ``` **maximize.vim:** ```vim " Vim plugin file " Maintainer: kAtremer <katremer yandex.ru> " Last changed: 2007 Oct 16 " " maximize.vim " maximize gVim's window on startup on Win32 " " to install, put the script and maximize.dll " in $VIM\vimfiles\plugin " Execute only once {{{ if exists("g:loaded_maximize") finish endif let g:loaded_maximize = 1 " }}} " Set the default compatibility options {{{ " (don't know if they do any difference, in such a small script...) let s:save_cpoptions = &cpoptions set cpoptions&vim " }}} " Define the path to the DLL file let s:dllfile = expand('<sfile>:p:h') . './maximize.dll' " Maximize GVim window on startup autocmd GUIEnter * call libcallnr(s:dllfile, 'Maximize', g:loaded_maximize) " ToggleVimResize function function! ToggleVimResize() " Checking the current value of g:loaded_maximize if g:loaded_maximize == 1 " If the window is maximized, change the value to 0 (reduce the window) let g:loaded_maximize = 0 else " If the window is not maximized, change the value to 1 (maximize the window) let g:loaded_maximize = 1 endif " Call the Maximize function with the new value g:loaded_maximize call libcallnr(s:dllfile, 'Maximize', g:loaded_maximize) endfunction " Restore the saved compatibility options {{{ let &cpoptions = s:save_cpoptions " }}} " vim:fdm=marker:fmr={{{,}}} " Binding the ToggleVimResize() function to the F11 key in various modes nnoremap <F11> :call ToggleVimResize()<CR> inoremap <F11> <C-o>:call ToggleVimResize()<CR> vnoremap <F11> :<C-u>call ToggleVimResize()<CR> ```
Aug 04