├── .gitignore ├── Clipjump.ahk ├── ClipjumpCommunicator.ahk ├── Clipjump_x64.ahk ├── NOTICE.txt ├── Readme.md ├── icons ├── icon.ico ├── no_history.ico ├── no_monitoring.ico └── octicons-local.ttf ├── languages ├── Nederlands.txt ├── PortugueseBR.txt ├── Russian.txt ├── english.txt ├── german.txt ├── swedish.txt └── 简体中文.txt ├── lib ├── API.ahk ├── Gdip_All.ahk ├── History GUI Plug.ahk ├── HotkeyParser.ahk ├── SQLiteDB │ └── Class_SQLiteDB.ahk ├── Settings GUI Plug.ahk ├── TT_Console.ahk ├── TooltipEx.ahk ├── WM_MOUSEMOVE.ahk ├── aboutGUI.ahk ├── anticj_func_labels.ahk ├── channelOrganizer.ahk ├── customizer.ahk ├── gdip_min.ahk ├── multi.ahk ├── pluginManager.ahk ├── searchPasteMode.ahk ├── settingsHelper.ahk └── translations.ahk ├── plugins ├── _registry.ahk ├── deleteFileFolder.ahk ├── external.historyPathClean.ahk ├── external.ignoreWmanager.ahk ├── external.inieditor.ahk ├── external.translationFileCleaner.ahk ├── hotPaste.ahk ├── noformatting_paste.ahk ├── pformat.commonformats.ahk ├── pformat.commonformats.lib │ └── unhtml.ahk ├── pformat.noformatting.ahk ├── pformat.sentencecase.ahk └── updateClipjumpClipboard.ahk ├── publicAPI.ahk ├── sqlite3.dll └── website ├── Cj.hhp ├── Contents.hhc ├── Index.hhk ├── _config.yml ├── _includes ├── disqus.html └── installing_custom.html ├── _layouts ├── customs.html ├── default.html └── docs.html ├── assets ├── base.css └── mojombo.css ├── changelog.html ├── clipjumpcontroller.html ├── contact.html ├── docs ├── basic_help.html ├── channels.html ├── custom.html ├── devList.html ├── examples │ └── ClipjumpCustom.ini ├── faq.html ├── history.html ├── index.html ├── ini.html ├── organizer.html ├── plugins │ ├── basics.html │ ├── index.html │ ├── plugin_commonformats.html │ └── plugin_hotpaste.html ├── settings.html ├── shortcuts.html ├── translate.html └── troubleshooting.html ├── favicon.ico ├── images ├── COPY.png ├── cancel.png ├── channelpaste.png ├── copyclip.png ├── delete.png ├── fixate.png ├── pasting.png ├── path.png ├── pformat.png ├── pluginerror.png └── trayicon.png └── index.html /.gitignore: -------------------------------------------------------------------------------- 1 | website/_site 2 | website/translations 3 | website/downloads 4 | website/addons.html 5 | website/news.html 6 | website/screenshots.html 7 | website/.jekyll-metadata 8 | cache/ 9 | settings.ini 10 | ClipjumpCustom.ini -------------------------------------------------------------------------------- /ClipjumpCommunicator.ahk: -------------------------------------------------------------------------------- 1 | /* 2 | Clipjump Communicator v4 3 | --------------------- 4 | Use this function to momentarily disable/enable Clipjump's "Clipboard monitoring" . 5 | 6 | ##################### 7 | HOW TO USE 8 | ##################### 9 | To DISABLE the selected of the following functions , sum their codes and send in the function - 10 | Clipboard Monitoring - 2 11 | Paste Mode - 4 12 | Copy file path - 8 13 | Copy folder path - 16 14 | Copy file data - 32 15 | Clipbord History Shortcut - 64 16 | Select Channel - 128 17 | One Time Stop shortcut - 256 18 | 19 | DISABLE ALL = Use a single code '1048576' 20 | 21 | ENABLE ALL = Use a single code '1' 22 | 23 | ##################### 24 | NOTES 25 | SEE EXAMPLE 26 | Make sure Clipjump is named as "Clipjump" (Case-Sensitive) both in exe or in ahk form 27 | 28 | ##################### 29 | Example 30 | To disable , Clipboard Monitoring and Copy file path shortcut, you use 31 | CjControl(2+8) = CjControl(10) 32 | Now to enable Copy file path shortcut but keep disabled the Clipboard Monitoring, use 33 | CjControl(1) - enable all functionalities 34 | CjControl(2) - disable Clipboard monitoring 35 | */ 36 | 37 | ;########################################################################################### 38 | ;FUNCTION (See HOW TO USE above) 39 | ;########################################################################################### 40 | 41 | CjControl(ByRef Code) 42 | { 43 | global 44 | local IsExe, TargetScriptTitle, CopyDataStruct, Prev_DetectHiddenWindows, Prev_TitleMatchMode, Z, S 45 | 46 | if ! (IsExe := CjControl_check()) 47 | return -1 ;Clipjump doesn't exist 48 | 49 | TargetScriptTitle := "Clipjump" (IsExe=1 ? ".ahk ahk_class AutoHotkey" : ".exe ahk_class AutoHotkey") 50 | 51 | VarSetCapacity(CopyDataStruct, 3*A_PtrSize, 0) 52 | SizeInBytes := (StrLen(Code) + 1) * (A_IsUnicode ? 2 : 1) 53 | NumPut(SizeInBytes, CopyDataStruct, A_PtrSize) 54 | NumPut(&Code, CopyDataStruct, 2*A_PtrSize) 55 | Prev_DetectHiddenWindows := A_DetectHiddenWindows 56 | Prev_TitleMatchMode := A_TitleMatchMode 57 | DetectHiddenWindows On 58 | SetTitleMatchMode 2 59 | Z := 0 60 | 61 | while !Z 62 | { 63 | SendMessage, 0x4a, 0, &CopyDataStruct,, %TargetScriptTitle% 64 | Z := ErrorLevel 65 | if A_index>100 66 | return -1 ;Timeout.. 67 | } 68 | 69 | DetectHiddenWindows %Prev_DetectHiddenWindows% 70 | SetTitleMatchMode %Prev_TitleMatchMode% 71 | 72 | while !FileExist(A_temp "\clipjumpcom.txt") 73 | sleep 50 74 | FileDelete % A_temp "\clipjumpcom.txt" 75 | 76 | return 1 ;True 77 | } 78 | 79 | CjControl_check(){ 80 | 81 | HW := A_DetectHiddenWindows , TM := A_TitleMatchMode 82 | DetectHiddenWindows, On 83 | SetTitleMatchMode, 2 84 | A := WinExist("\Clipjump.ahk - ahk_class AutoHotkey") 85 | E := WinExist("\Clipjump.exe - ahk_class AutoHotkey") 86 | DetectHiddenWindows,% HW 87 | SetTitleMatchMode,% TM 88 | 89 | return A ? 1 : (E ? 2 : 0) 90 | } -------------------------------------------------------------------------------- /Clipjump_x64.ahk: -------------------------------------------------------------------------------- 1 | #Notrayicon 2 | 3 | run, %A_AhkPath% "%A_ScriptDir%\Clipjump.ahk" -------------------------------------------------------------------------------- /NOTICE.txt: -------------------------------------------------------------------------------- 1 | Clipjump 2 | Copyright (C) 2013 Avi Aryan 3 | Licensed under Apache License v2.0 4 | 5 | Clipjump is a free multiple clipboard manager with extra-ordinary features. 6 | 7 | Clipjump can be redistributed freely provided this file remains intact. 8 | More on redistribution (and editing) terms can be seen at (http://www.apache.org/licenses/LICENSE-2.0). 9 | 10 | Contact ================== 11 | 12 | Mail:- avi.aryan123@gmail.com 13 | Site:- www.aviaryan.github.io 14 | Site:- www.github.com/aviaryan -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | ## Clipjump 2 | 3 | [Download](https://github.com/aviaryan/Clipjump/releases) 4 | [Online Manual](http://clipjump.sourceforge.net/docs/) 5 | 6 | Clipjump is a Multiple-Clipboard management utility for Windows. 7 | It was built to make working with multiple clipboards super fast and super easy. 8 | The program records changes in the system clipboard, stores them without any limits and provides innovative ways to work with them. 9 | 10 | 11 | #### Running from the Source 12 | 1. Get [AutoHotkey](http://www.ahkscript.org) and install it. 13 | 2. Then double-click `Clipjump.ahk` to run it with AutoHotkey.exe 14 | 15 | 16 | #### Distribution 17 | Clipjump is distributed without compiling and a disguised AutoHotkey.exe renamed as Clipjump.exe runs Clipjump.ahk 18 | 19 | 1. Get the [ResHacked AutoHotkey.exe](http://sourceforge.net/projects/clipjump/files/other_downloads/Clipjump_ahkExe.7z/download) from sourceforge. This is the one which is to be distributed as Clipjump.exe 20 | 2. Correct the version numbers of the binary file. 21 | 3. Distribute it with the source. 22 | 23 | 24 | #### Building the Docs 25 | Docs can be compiled using Jekyll and then Microsoft's HHC. First build the website folder using Jekyll and then compile the jekyll-processed files using HHC. 26 | 27 | 28 | #### Adding Plugins 29 | Please add your plugins to the [clipjump-addons](https://github.com/aviaryan/clipjump-addons) repository. This repo only contains plugins distributed with official Clipjump release. 30 | If I realise your plugin is useful for the community, I will distribute it officially and hence it will be added to this repository. See [#68](https://github.com/aviaryan/Clipjump/issues/68) -------------------------------------------------------------------------------- /icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/icons/icon.ico -------------------------------------------------------------------------------- /icons/no_history.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/icons/no_history.ico -------------------------------------------------------------------------------- /icons/no_monitoring.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/icons/no_monitoring.ico -------------------------------------------------------------------------------- /icons/octicons-local.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/icons/octicons-local.ttf -------------------------------------------------------------------------------- /languages/Nederlands.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/languages/Nederlands.txt -------------------------------------------------------------------------------- /languages/简体中文.txt: -------------------------------------------------------------------------------- 1 | ;Chinese translation for Clipjump 2 | ;first made by 兔子 3 | 4 | ; NOTES 5 | ; Comments should only be at the start of the line 6 | ; Add new keys in the future versions at the bottom for easy & consistent development 7 | ; Add version no in comment when adding a new key in the translation file. 8 | ; Most keys have format XXX_ where XXX is the component name 9 | ; Dont translate 'Clipjump' 10 | ; & in &Preview is to create shortcut Alt+P when the window is active. When translating into a non-english language, omit '&' and when in a english type language, use '&' 11 | ; only when you are sure you are right. 12 | ; Words inside %..% are variables. Take them as constants and translate them accordingly. 13 | 14 | ;======* 15 | ;v9.9.0.1 16 | ;====== 17 | 18 | ;以下是我在使用过程中发现的各种bug。这些bug基本上记录于9.9版,之后由于各种原因并未验证这些bug是否依然存在。同样需要注意的是,有些bug仅存于xp,例如忽略窗口管理器的卡死bug。 19 | ;版本号中带*的段落表明此段落翻译已在程序中实际检查并与效果对应的翻译,换句话说,就是很好的翻译 20 | ;**首次启动程序后,切换到中文后托盘右键菜单会多出几项英文 21 | ;*剪贴板历史,预览框中的查找 22 | ;**活动命令常常定位到鼠标所在位置 23 | ;**复制文件路径导致的崩溃 24 | ;双击预览图片后崩溃 25 | ;**设置界面中取消和应用按钮不起作用 26 | ;**多次点击设置界面中的管理忽略窗口 27 | ;设置界面中高级设置只能打开一次 28 | ;**频道1中,剪贴板不遵循最大限制的问题 29 | ;频道1中,有时未松开CTRL 提示信息就消失了 30 | ;**添加忽略窗口后存在延迟 31 | ;忽略窗口管理,删除空条目后再点选一个条目,再次卡住 32 | ;活动命令存在BUG显示在桌面右上角 33 | ;设置窗口标题 34 | ;设置窗口,频道前面的英文 35 | ;频道组织,新建一条剪贴板信息下的取消按钮无效 36 | ;频道组织,编辑属性下的取消按钮无效 37 | ;插件管理,编辑属性下的取消按钮无效 38 | ;活动命令下的文本不整齐 39 | ;频道组织,选中多个项目进行频道间转移会失败 40 | ;PLG_properties被同时使用在插件管理和频道组织中是不合理的,因为前者不可编辑,后者可编辑 41 | ;编辑属性界面中存在一堆英文 42 | ;频道组织,一切为空时图标无法正常显示 43 | 44 | TIP_text = 文本 45 | TIP_file_folder = 文件/文件夹 46 | TIP_empty1 = 第 0 总 0 47 | TIP_error = [预览/路径 载入失败] 48 | TIP_more = [更多] 49 | TIP_pasting = 粘贴中… 50 | TIP_deleted = 已删除 51 | TIP_alldeleted = 全部信息已删除 52 | TIP_cancelled = 已取消 53 | TIP_fixed = [固定] 54 | TIP_filepath = 文件路径复制到 55 | TIP_folderpath = 文件所在目录复制到 56 | TIP_activated = 已激活 57 | TIP_deactivated = 已失效 58 | TIP_cancelm = 取消粘贴操作 59 | TIP_delm = 删除最近一条剪贴板信息 60 | TIP_delallm = 删除全部剪贴板信息 61 | TIP_modem = 松开 Ctrl 确认 62 | = 按 X 切换模式 63 | 64 | ABT__name = 关于 65 | ABT_reset = 重置 &Clipjump 66 | ABT_resetM = 确定要重置 Clipjump 吗?(将移除所有保存的剪贴板信息并恢复默认设置) 67 | ABT_removeStart = 发现 Clipjump 已设为自启动,想一并移除吗? 68 | ABT_resetfinal = 将被关闭。 69 | ABT_noupdate = 已是最新版本。 70 | 71 | HST__name = 剪贴板历史 72 | HST_preview = 预览(&P) 73 | HST_del = 删除(&T) 74 | HST_clear = 清空(&H) 75 | HST_search = 搜索过滤(&F) 76 | HST_partial = 部分(&R) 77 | HST_clip = 剪贴板内容 78 | HST_date = 时间 79 | HST_size = 大小(B) 80 | HST_dconsump = 占用硬盘 81 | HST_m_prev = 预览(&P) 82 | HST_m_copy = 复制(&C) (Ctrl+C) 83 | HST_m_insta = 快速粘贴(&I) (Space) 84 | HST_m_export = 导出(&E) (Ctrl+E) 85 | HST_m_ref = 刷新(&R) 86 | HST_m_del = 删除(&D) 87 | 88 | PRV__name = 预览 89 | PRV_copy = 复制到剪贴板 90 | PRV_find = 查找(&D) 91 | 92 | SET__name = 设置 93 | SET_main = 主要设置 94 | SET_limitmaxclips = 限制剪贴板信息最大数量(&L) 95 | SET_maxclips = 基础值(&M) 96 | SET_threshold = 阈值(&T) 97 | SET_quality = 用于预览的缩略图质量(&Q) 98 | SET_copybeep = 复制成功时声音提示(&B) 99 | SET_ismessage = 复制成功时文字提示(&S) 100 | SET_keepsession = 保存剪贴板信息以便重启后继续使用(&R) 101 | SET_cb = 剪贴板历史 102 | SET_daystostore = 历史信息保留天数(&H) 103 | SET_images = 历史信息中存储图片(&I) 104 | SET_shortcuts = 快捷键 105 | SET_pst = 粘贴 (Ctrl + …) 106 | SET_actmd = 活动命令 107 | SET_channels = 频道 108 | SET_advanced = 高级设置 109 | SET_manageignore = 管理忽略窗口(不想 Clipjump 起作用的窗口) 110 | SET_cancel = 取消(&C) 111 | SET_apply = 应用(&A) 112 | 113 | SET_advanced_error = 无法找到设置文件(settings.ini) 或 记事本程序?确保它们在各自位置存在。 114 | = 115 | = 如果问题仍然存在,请联系作者。 116 | SET_T_limitmaxclips = Clipjump 的剪贴板信息数量是否存在最大限制。 117 | = 选中 = 是 118 | SET_T_maxclips = 最大数量 = 基础值+阈值 119 | = 比如基础值为10,阈值为5;当 Clipjump 中已存在14条剪贴板信息后,此时再进行一次复制操作,剪贴板数量将变为10而非15。 120 | SET_T_threshold = 阈值的详细作用参见基础值的解释;简单理解可视为基础值之上临时增加的数量。 121 | = 多数时候推荐值是10。 122 | = 123 | = [提示] - 阈值 = 1 将使 最大数量 = 基础值。 124 | SET_T_quality = 你希望用于预览的缩略图的质量。 125 | = 推荐值是 90 126 | = 可设范围 1 - 100 127 | SET_T_copybeep = 当复制成功时,可听到一个定制的声响。 128 | = 129 | = 你可以在 Settings.ini 的 [Advanced] 段中修改声响频率。 130 | SET_T_ismessage = 这个值决定了当 复制/粘贴 操作成功时,你是否想看到确认消息。 131 | SET_T_daystostore = 剪贴板信息将被保留的天数。 132 | SET_T_images = 剪贴板中的图片也要保留在历史信息中吗? 133 | SET_T_chnl = 这个快捷键用于打开 频道 134 | = 设置快捷键为 无 将只能通过 托盘右键菜单 或 活动命令 打开频道 135 | SET_T_cfilep = 这个快捷键用于 复制选中文件路径 136 | = 设置快捷键为 无 将只能通过 活动命令 使用此功能 137 | SET_T_cfolderp = 这个快捷键用于 复制选中文件所在目录 138 | = 设置快捷键为 无 将只能通过 活动命令 使用此功能 139 | SET_T_cfiled = 这个快捷键用于 复制选中文件内容 140 | = 设置快捷键为 无 将只能通过 活动命令 使用此功能 141 | SET_T_pitswp = 这个快捷键用于激活 PitSwap 特性 142 | = 关于此特性的更多细节请看帮助文件。 143 | SET_T_ischannelmin = 使频道界面细节更少,感觉更好。 144 | = 迷你界面下没有任何按钮,你可以使用回车键确认。 145 | 146 | CNL__name = 频道 147 | CNL_choose = 选择频道(&C) 148 | 149 | TRY_incognito = 隐身模式(&I) 150 | TRY_disable = 停用(&D) 151 | TRY_startup = 开机时启动 152 | TRY_updates = 检查更新(&U) 153 | TRY_help = 帮助 154 | TRY_restart = 重启(&R) 155 | TRY_exit = 退出(&E) 156 | 157 | ACT__name = 活动命令 158 | ACT_disable = 停用 159 | ACT_exit = 退出活动命令 160 | 161 | IGN__name = 忽略窗口管理 162 | IGN_add = 添加窗口(&A) Class 163 | IGN_delete = 删除窗口(&D) Class 164 | 165 | LNG_error = 没找到简体中文翻译文件 languages/简体中文.txt 。如果你是故意移走或删除的,放回去。 166 | 167 | _cfilep = 复制文件路径 168 | _cfolderp = 复制文件所在目录 169 | _cfiled = 复制文件内容 170 | _ot = One Time Stop 171 | _pitswp = PitSwap 172 | _exportedto = 导出到 173 | ;============* 174 | ;9.9.0.2 175 | ;============ 176 | 177 | IGN_Restartmsg = 需要重启 Clipjump 以使更改生效。确认重启? 178 | IGN_tip = 鼠标点选窗口后,按 空格 即可添加。 179 | = 按 Esc 返回。 180 | ;===========* 181 | ;9.9.1 182 | ;=========== 183 | 184 | TRY_options = 设置(&O) 185 | TRY_tools = 工具(&T) 186 | HST_delall_msg = 确定要清空 Clipjump 的历史记录? 187 | ; the following key was modified in v9.9.1 and so you see its entry here 188 | SET_T_actmd = 这个快捷键用于打开 活动命令。 189 | = 活动命令状态下,可快速调用程序提供的几乎所有功能。 190 | = 如果想使用单独的快捷键调用那些功能,可以在下面设置。 191 | 192 | ;==========* 193 | ;9.9.1.9 194 | ;========== 195 | 196 | TIP_empty3 = 松开 Ctrl 退出。 197 | UPD_restart = Clipjump 现在将重启以便应用更新。 198 | UPD_automsg = 点击 是 将自动更新 Clipjump 点击 否 将前往主页。 199 | 200 | ;=========* 201 | ;10 202 | ;========= 203 | 204 | CHC_name = 选择频道 205 | TIP_done = 完成 206 | TIP_copycutfailed = 复制/移动 未完成 207 | TIP_copy = 复制到 208 | TIP_move = 移动到 209 | 210 | ;========* 211 | ;10.5 beta 212 | ;======== 213 | 214 | TIP_delallprompt = 警告 215 | = 你真的想删除当前频道下的全部剪贴板信息? 216 | = 按 Y 确认。 217 | = 按 N 取消。 218 | 219 | ;=======* 220 | ;10.6 221 | ;======= 222 | 223 | ABT_seehelp = 你想看看 Clipjump 的帮助吗? 224 | ABT_runadmin = Clipjump 没有以管理员权限运行 225 | = 这(可能)是因为程序功能不正常。 226 | = 227 | = [这条消息只会显示一次] 228 | ABT_cjready = 嗨! 229 | = Clipjump 已经激活了。 230 | = 现在试试复制粘贴点东西… 231 | TIP_editdone = 剪贴板信息已被编辑 232 | TIP_editnotdone = 剪贴板信息未被编辑! 233 | 234 | ;======* 235 | ;10.7 236 | ;====== 237 | 238 | HST_m_edit = 编辑 (Ctrl+H) 239 | 240 | ;======* 241 | ;10.7.2.6b 242 | ;====== 243 | 244 | _name = 插件 245 | _tags = 标签 246 | _author = 作者 247 | _run = 运行 248 | _properties = 属性 249 | PLG_properties = 编辑属性 (Alt+Enter) 250 | PLG__name = 插件管理 251 | PLG_fetchparam = 设置插件参数 252 | PLG_delmsg = 你确定要删除下列插件? 253 | PLG_restartmsg = 插件已删除。 254 | = 请注意插件将在程序重启后生效。 255 | = 想继续吗? 256 | API_extplugMiss = 以下外部插件文件丢失。 257 | API_plugCorrupt = 以下插件损坏或丢失。 258 | 259 | ;=====* 260 | ;10.7.5 261 | ;===== 262 | 263 | PLG_Sb_running = 插件运行中 264 | PLG_Sb_exit = 插件已终止 265 | PLG_Sb_deleted = 插件已删除 266 | SET_T_pst = 粘贴时使用 Ctrl + 哪个键(即粘贴模式) 267 | = 注意 E C X Z S A F H 是保留的。 268 | = 269 | = 详细信息请看帮助文件中“Copy bypassing Clipjump”一节。 270 | SET_pformat = 粘贴格式 271 | SET_T_pformat = 你想要 Clipjump 启动后激活的粘贴格式。默认值是“-original”。 272 | SET_t_plugM = 打开插件管理的快捷键 273 | PLG_edit = 编辑 (F2) 274 | CUS_error = ClipjumpCustom.ini 中存在错误? 275 | 276 | ;=====* 277 | ;10.7.8 278 | ;===== 279 | 280 | TRY_pstmdshorts = 粘贴模式快捷键 281 | 282 | ;=====* 283 | ;10.9 284 | ;===== 285 | 286 | SET_T_holdclip = 复制选中的文本或项目到缓冲区,防止被 Clipjump 捕获。 287 | = 然后你可以粘贴、舍弃、或添加到 Clipjump 中。 288 | SET_keepactivepos = 记住当前活动剪贴板信息序号 289 | SET_T_keepactivepos = 选中此项将使 Clipjump 记住最后被使用的剪贴板信息的序号。 290 | = 不勾选将使粘贴模式总是从序号1开始。 291 | 292 | ;=====* 293 | ;11 294 | ;===== 295 | 296 | HST_viewimage = [图片] 297 | ORG__name = 频道组织 298 | ORG_m_inc = 上移 (Alt+Up) 299 | ORG_m_dec = 下移 (Alt+Down) 300 | ORG_error = 不支持 301 | ORG_countStatus = 项目数量 302 | SET_org = 频道组织 303 | ORG_delCnlMsgTitle = 选择频道操作 304 | ORG_delCnlMsg = 你想对选中频道进行何种操作? 305 | = 永久删除频道 = 是 306 | = 清空频道 = 否 307 | = 什么也不做 = 取消 308 | _rename = 重命名 309 | ORG_renameAsk = 请为以下编号频道输入新名字 310 | TIP_initMsg = 正在初始化 Clipjump 311 | 312 | ;======* 313 | ;11.2 314 | ;====== 315 | 316 | TIP_tagPrompt = 输入标签(多个标签使用 空格 分隔) 317 | SET_startSearch = 粘贴模式开启搜索功能 318 | SET_T_startSearch = 选中此项将使粘贴模式启动后搜索功能亦随之开启。 319 | = 如果你不喜欢按住 Ctrl 切换剪贴板信息的方式,这个设置将很有用。也可以在帮助文件中搜索“Search in Paste Mode”。 320 | _editing = 编辑中 321 | 322 | ;=======* 323 | ; 11.2.3 324 | ;======= 325 | _more_options = 更多设置 326 | ORG_m_openpst = 在粘贴模式中打开 (Ctrl+O) 327 | _!x = Alt+X 328 | _!c = Alt+C 329 | ORG_m_insta = 快速粘贴 (Space) 330 | 331 | ;=======* 332 | ; 11.3 333 | ;======= 334 | _destChannel = 目标频道 335 | _maintenance = 维护 336 | _new = 新建 337 | ORG_createnewpr = 剪贴板信息将被创建于频道 338 | ORG_newchname = 新频道名称 339 | 340 | ;=======* 341 | ; 11.4 - Added tooltips for Channel Organizer (hoppfrosch) 342 | ;======= 343 | ORG_search = 搜索 344 | ORG_up = 上移 345 | ORG_down = 下移 346 | ORG_edit = 编辑 347 | ORG_props = 编辑属性 348 | ORG_cut = 剪切到 349 | ORG_copy = 复制到 350 | ORG_delete = 删除 351 | ; ---- 352 | 353 | SET_revFormat2Def = 总是使用默认粘贴格式 354 | SET_T_revFormat2Def = 选中此项将使粘贴格式总是使用“-original”。 355 | ORG_copyingclp = 复制中 356 | ORG_movingclp = 移动中 357 | ORG_Editprops = 编辑属性 358 | ORG_oEditMsg = 完成后请点击保存。 359 | ABT_info = Clipjump 是一款使用 AutoHotkey 编写的 Windows 平台剪贴板管理软件。 360 | = 它的灵感来自于 Skrommel 的程序 ClipStep。 361 | _Save = 保存 362 | SET_T_keepsession = 选中此项将使 Clipjump 在重启后可以继续使用之前保存的全部剪贴板信息(仅默认频道 0)。 363 | 364 | ;======== 365 | ; 11.5 366 | ;======== 367 | _ClipjumpError = Clipjump 错误 368 | TIP_genErrMsg = 如果你持续遇到这个问题请联系作者。 369 | TRY_reloadcustom = 重载 ClipjumpCustom.ini 370 | 371 | ;======= 372 | _language = 语言 373 | _disabled = 禁用 374 | PLG_delfilefolder = 删除 [文件/文件夹] 375 | ABT_chmErr = 出现问题了。 376 | = 请检查文件 Clipjump.chm 是否存在于程序根目录。 377 | 378 | ;======= 379 | ; 11.6 380 | ;======= 381 | ORG_createnew = 新建一条剪贴板信息 382 | ORG_chooseCh = 激活频道 383 | ABT_errorFontIcon = 文件 %GHICON_path% 丢失。这将导致某些用户界面的显示出现问题。请将文件移回原位。 384 | CNL_chngMsg = 频道 %cv1% 被激活 385 | CNL_chNtExst = 频道 %cv1% 不存在! 386 | SET_holdclip = 临时复制 387 | ORG_openPastemode = 在粘贴模式中打开 388 | TIP_confirmcopy = 你看到这条确认消息是因为这是个受保护的频道。 389 | = 确认允许它被复制到此频道吗? 390 | = 按 Y 确认 391 | = 按 N 取消 392 | = 按 Insert 复制到频道 0 393 | _processing = 处理中 394 | TIP_protectedMoved = 已复制到频道 0 ! 395 | TIP_holdclip = 按 Ctrl+V 粘贴 396 | = 按 Insert 将剪贴板信息添加到频道中 397 | = 按 F2 在格式化界面中打开 398 | = 按 Esc 退出 399 | _output = 输出 400 | TIP_copied_2 = 复制到 %PROGNAME% 401 | TIP_empty2_2 = %PROGNAME% 没有可粘贴的内容 402 | 403 | ;==== 404 | ; 11.6.1 405 | ;==== 406 | 407 | SET_T_histshort = 剪贴板历史 408 | PLG_sync_cb = 同步 Clipjump 409 | 410 | ;==== 411 | ; 12 412 | ;==== 413 | 414 | ORG_NewClip = 新建 415 | ORG_clpdelmsg = 选中的剪贴板信息已被删除 416 | TIP_syscb = 系统剪贴板已存入剪贴板信息 %realclipno% 417 | TIP_editing = 编辑中… 418 | = 按 Esc 取消 419 | = 按 保存(Ctrl+S) 键保存修改 420 | 421 | ;===== 422 | ; 12.3 423 | ;===== 424 | 425 | ; Note to Translator > please make sure the out in Ctrl+v+F1 is aligned properly in TIP_help 426 | TIP_help = 427 | = 松开 Ctrl - 粘贴 428 | = V - 下一条剪贴板信息 429 | = C - 前一条剪贴板信息 430 | = X - 取消粘贴、移动、复制、删除剪贴板信息 431 | = Z - 切换粘贴格式 432 | = Space - 固定 433 | = S - 将当前剪贴板信息存入系统剪贴板 434 | = E - 导出 435 | = Up/Down - 切换频道 +1/-1 436 | = A - 跳至首条剪贴板信息 437 | = 1…9 - 以 n 为步长进行跳至 438 | = F - 搜索 439 | = H - 编辑 440 | = Q - 将当前剪贴板信息设为首条 441 | = Enter - 重复粘贴当前剪贴板信息 442 | = T - 标签 443 | = 按住 Shift - 粘贴后删除当前剪贴板信息 444 | = F1 - 帮助 445 | = 446 | = 按 V 退出此窗口 447 | -------------------------------------------------------------------------------- /lib/HotkeyParser.ahk: -------------------------------------------------------------------------------- 1 | /* 2 | HParse() 3 | © Avi Aryan 4 | 5 | 5th Revision - 8/7/14 6 | ========================================================================= 7 | Extract Autohotkey hotkeys from user-friendly shortcuts reliably and V.V 8 | ========================================================================= 9 | ========================================== 10 | EXAMPLES - Pre-Runs 11 | ========================================== 12 | 13 | msgbox % Hparse("Cntrol + ass + S", false) ;returns As 'ass' is out of scope and RemoveInvaild := false 14 | msgbox % Hparse("Contrl + At + S") ;returns ^!s 15 | msgbox % Hparse("^!s") ;returns ^!s as the function-feed is already in Autohotkey format. 16 | msgbox % Hparse("LeftContrl + X") ;returns Lcontrol & X 17 | msgbox % Hparse("Contrl + Pageup + S") ;returns As the hotkey is invalid 18 | msgbox % HParse("PagUp + Ctrl", true) ;returns ^PgUp as ManageOrder is true (by default) 19 | msgbox % HParse("PagUp + Ctrl", true, false) ;returns as ManageOrder is false and hotkey is invalid 20 | msgbox % Hparse("Ctrl + Alt + Ctrl + K") ;returns as two Ctrls are wrong 21 | msgbox % HParse("Control + Alt") ;returns ^Alt and NOT ^! 22 | msgbox % HParse("Ctrl + F1 + Nmpd1") ;returns As the hotkey is invalid 23 | msgbox % HParse("Prbitscreen + f1") ;returns PrintScreen & F1 24 | msgbox % HParse("Prbitscreen + yyy") ;returns PrintScreen As RemoveInvalid is enabled by default. 25 | msgbox % HParse("f1+ browser_srch") ;returns F1 & Browser_Search 26 | msgbox % HParse("Ctrl + joy1") ;returns Ctrl & Joy1 27 | msgbox % Hparse("pagup & paegdown") ;returns PgUp & PgDn 28 | MsgBox % HParse("Ctrl + printskreen", 1, 1, 1) ; SEND Mode - on returns ^{printscreen} 29 | msgbox % Hparse_rev("^!s") ;returns Ctrl+Alt+S 30 | msgbox % Hparse_rev("Pgup & PgDn") ;returns Pageup & PgDn 31 | */ 32 | 33 | 34 | 35 | ;################################################################### 36 | ;PARAMETERS - HParse() [See also Hparse_Rev() below] 37 | ;------------------------------- 38 | ;HParse(Hotkey, RemoveInvalid, ManageOrder, sendMd) 39 | ;################################################################### 40 | 41 | ;• Hotkey - The user shortcut such as (Control + Alt + X) to be converted 42 | 43 | ;• RemoveInvalid(true) - Remove Invalid entries such as the 'ass' from (Control + ass + S) so that the return is ^s. When false the function will return when an 44 | ; invalid entry is found. 45 | 46 | ;• ManageOrder(true) - Change (X + Control) to ^x and not x^ so that you are free from errors. If false, a value is returned when the hotkey is found un-ordered. 47 | 48 | ;+ SendMd(true) - returns ^{printscreen} instead of ^printscreen so that the hotkey properly works with the Send command 49 | 50 | HParse(Hotkey, RemoveInvaild = true, ManageOrder = true, sendMd=false) 51 | { 52 | 53 | firstkey := Substr(Hotkey, 1, 1) 54 | if firstkey in ^,!,+,# 55 | return, Hotkey 56 | 57 | loop,parse,Hotkey,+-&,%a_space% 58 | { 59 | if (Strlen(A_LoopField) != 1) 60 | { 61 | parsed := Hparse_LiteRegexM(A_LoopField) 62 | if sendMd && (StrLen(parsed)>1) && (Instr(parsed, "vk") != 1) 63 | parsed := "{" parsed "}" 64 | If !(RemoveInvaild) 65 | { 66 | IfEqual,parsed 67 | { 68 | Combo = 69 | break 70 | } 71 | else 72 | Combo .= " & " . parsed 73 | } 74 | else 75 | IfNotEqual,parsed 76 | Combo .= " & " . parsed 77 | } 78 | else 79 | Combo .= " & " . A_LoopField 80 | } 81 | 82 | non_hotkey := 0 83 | IfNotEqual, Combo ;Convert the hotkey to perfect format 84 | { 85 | StringTrimLeft,Combo,Combo,3 86 | loop,parse,Combo,&,%A_Space% 87 | { 88 | if A_Loopfield not in ^,!,+,# 89 | non_hotkey+=1 90 | } 91 | ;END OF LOOP 92 | if (non_hotkey == 0) 93 | { 94 | StringRight,rightest,Combo,1 95 | StringTrimRight,Combo,Combo,1 96 | IfEqual,rightest,^ 97 | rightest = Ctrl 98 | else IfEqual,rightest,! 99 | rightest = Alt 100 | ELSE IfEqual,rightest,+ 101 | rightest = Shift 102 | else rightest = LWin 103 | Combo := Combo . Rightest 104 | } 105 | ;Remove last non 106 | IfLess,non_hotkey,2 107 | { 108 | IfNotInString,Combo,Joy 109 | { 110 | StringReplace,Combo,Combo,%A_Space%&%A_Space%,,All 111 | temp := Combo 112 | loop,parse,temp 113 | { 114 | if A_loopfield in ^,!,+,# 115 | { 116 | StringReplace,Combo,Combo,%A_loopfield% 117 | _hotkey .= A_loopfield 118 | } 119 | } 120 | Combo := _hotkey . Combo 121 | 122 | If !(ManageOrder) ;ManageOrder 123 | IfNotEqual,Combo,%temp% 124 | Combo = 125 | 126 | temp := "^!+#" ;just reusing the variable . Checking for Duplicates Actually. 127 | IfNotEqual,Combo 128 | { 129 | loop,parse,temp 130 | { 131 | StringGetPos,pos,Combo,%A_loopfield%,L2 132 | IF (pos != -1){ 133 | Combo = 134 | break 135 | } 136 | } 137 | } 138 | ;End of Joy 139 | } 140 | else ;Managing Joy 141 | { 142 | StringReplace,Combo,Combo,^,Ctrl 143 | StringReplace,Combo,Combo,!,Alt 144 | StringReplace,Combo,Combo,+,Shift 145 | StringReplace,Combo,Combo,#,LWin 146 | StringGetPos,pos,Combo,&,L2 147 | if (pos != -1) 148 | Combo = 149 | } 150 | } 151 | else 152 | { 153 | StringGetPos,pos,Combo,&,L2 154 | if (pos != -1) 155 | Combo = 156 | } 157 | } 158 | 159 | return, Combo 160 | } 161 | 162 | ;########################################################################################### 163 | ;Hparse_rev(Keycombo) 164 | ; Returns the user displayable format of Ahk Hotkey 165 | ;########################################################################################### 166 | 167 | HParse_rev(Keycombo){ 168 | 169 | if Instr(Keycombo, "&") 170 | { 171 | loop,parse,Keycombo,&,%A_space%%A_tab% 172 | toreturn .= A_LoopField " + " 173 | return Substr(toreturn, 1, -3) 174 | } 175 | Else 176 | { 177 | StringReplace, Keycombo, Keycombo,^,Ctrl& 178 | StringReplace, Keycombo, Keycombo,#,Win& 179 | StringReplace, Keycombo, Keycombo,+,Shift& 180 | StringReplace, Keycombo, Keycombo,!,Alt& 181 | loop,parse,Keycombo,&,%A_space%%A_tab% 182 | toreturn .= ( Strlen(A_LoopField)=1 ? Hparse_StringUpper(A_LoopField) : A_LoopField ) " + " 183 | return Substr(toreturn, 1, -3) 184 | } 185 | } 186 | 187 | Hparse_StringUpper(str){ 188 | StringUpper, o, str 189 | return o 190 | } 191 | 192 | ;------------------------------------------------------ 193 | ;SYSTEM FUNCTIONS : NOT FOR USER'S USE 194 | ;------------------------------------------------------ 195 | 196 | Hparse_LiteRegexM(matchitem, primary=1) 197 | { 198 | 199 | regX := Hparse_ListGen("RegX", primary) 200 | keys := Hparse_Listgen("Keys", primary) 201 | matchit := matchitem 202 | 203 | loop,parse,Regx,`r`n, 204 | { 205 | curX := A_LoopField 206 | matchitem := matchit 207 | exitfrombreak := false 208 | 209 | loop,parse,A_LoopField,* 210 | { 211 | if (A_index == 1) 212 | if (SubStr(matchitem, 1, 1) != A_LoopField){ 213 | exitfrombreak := true 214 | break 215 | } 216 | 217 | if (Hparse_comparewith(matchitem, A_loopfield)) 218 | matchitem := Hparse_Vanish(matchitem, A_LoopField) 219 | else{ 220 | exitfrombreak := true 221 | break 222 | } 223 | } 224 | 225 | if !(exitfrombreak){ 226 | linenumber := A_Index 227 | break 228 | } 229 | } 230 | 231 | IfNotEqual, linenumber 232 | { 233 | StringGetPos,pos1,keys,`n,% "L" . (linenumber - 1) 234 | StringGetPos,pos2,keys,`n,% "L" . (linenumber) 235 | return, Substr(keys, (pos1 + 2), (pos2 - pos1 - 1)) 236 | } 237 | else 238 | return Hparse_LiteRegexM(matchit, 2) 239 | } 240 | ; Extra Functions ----------------------------------------------------------------------------------------------------------------- 241 | 242 | Hparse_Vanish(matchitem, character){ 243 | StringGetPos,pos,matchitem,%character%,L 244 | StringTrimLeft,matchitem,matchitem,(pos + 1) 245 | return, matchitem 246 | } 247 | 248 | Hparse_comparewith(first, second) 249 | { 250 | if first is Integer 251 | IfEqual,first,%second% 252 | return, true 253 | else 254 | return, false 255 | 256 | IfInString,first,%second% 257 | return, true 258 | else 259 | return, false 260 | } 261 | 262 | ;###################### DANGER ################################ 263 | ;SIMPLY DONT EDIT BELOW THIS . MORE OFTEN THAN NOT, YOU WILL MESS IT. 264 | ;################################################################### 265 | Hparse_ListGen(what,primary=1){ 266 | if (primary == 1) 267 | { 268 | IfEqual,what,Regx 269 | Rvar = 270 | ( 271 | L*c*t 272 | r*c*t 273 | l*s*i 274 | r*s*i 275 | l*a*t 276 | r*a*t 277 | S*p*c 278 | C*t*r 279 | A*t 280 | S*f 281 | W*N 282 | t*b 283 | E*r 284 | E*s*c 285 | B*K 286 | D*l 287 | I*S 288 | H*m 289 | E*d 290 | P*u 291 | p*d 292 | l*b*t 293 | r*b*t 294 | m*b*t 295 | up 296 | d*n 297 | l*f 298 | r*t 299 | F*1 300 | F*2 301 | F*3 302 | F*4 303 | F*5 304 | F*6 305 | F*7 306 | F*8 307 | F*9 308 | F*10 309 | F*11 310 | F*12 311 | N*p*Do 312 | N*p*D*v 313 | N*p*M*t 314 | N*p*d*Ad 315 | N*p*S*t 316 | N*p*E*r 317 | s*l*k 318 | c*l 319 | n*l*k 320 | p*s 321 | c*t*b 322 | pa*s 323 | b*r*k 324 | x*b*1 325 | x*b*2 326 | z*z*z*z*callmelazybuthtisisaworkaround 327 | ) 328 | ;==================================================== 329 | ;# Original return values below (in respect with their above positions, dont EDIT) 330 | IfEqual,what,Keys 331 | Rvar = 332 | ( 333 | LControl 334 | RControl 335 | LShift 336 | RShift 337 | LAlt 338 | RAlt 339 | space 340 | ^ 341 | ! 342 | + 343 | # 344 | Tab 345 | Enter 346 | Escape 347 | Backspace 348 | Delete 349 | Insert 350 | Home 351 | End 352 | PgUp 353 | PgDn 354 | LButton 355 | RButton 356 | MButton 357 | Up 358 | Down 359 | Left 360 | Right 361 | F1 362 | F2 363 | F3 364 | F4 365 | F5 366 | F6 367 | F7 368 | F8 369 | F9 370 | F10 371 | F11 372 | F12 373 | NumpadDot 374 | NumpadDiv 375 | NumpadMult 376 | NumpadAdd 377 | NumpadSub 378 | NumpadEnter 379 | ScrollLock 380 | CapsLock 381 | NumLock 382 | PrintScreen 383 | CtrlBreak 384 | Pause 385 | Break 386 | XButton1 387 | XButton2 388 | A_lazys_workaround 389 | ) 390 | } 391 | else 392 | { 393 | ;here starts the second preference list. 394 | IfEqual,what,Regx 395 | Rvar= 396 | ( 397 | N*p*0 398 | N*p*1 399 | N*p*2 400 | N*p*3 401 | N*p*4 402 | N*p*5 403 | N*p*6 404 | N*p*7 405 | N*p*8 406 | N*p*9 407 | F*13 408 | F*14 409 | F*15 410 | F*16 411 | F*17 412 | F*18 413 | F*19 414 | F*20 415 | F*21 416 | F*22 417 | F*23 418 | F*24 419 | N*p*I*s 420 | N*p*E*d 421 | N*p*D*N 422 | N*p*P*D 423 | N*p*L*f 424 | N*p*C*r 425 | N*p*R*t 426 | N*p*H*m 427 | N*p*Up 428 | N*p*P*U 429 | N*p*D*l 430 | J*y*1 431 | J*y*2 432 | J*y*3 433 | J*y*4 434 | J*y*5 435 | J*y*6 436 | J*y*7 437 | J*y*8 438 | J*y*9 439 | J*y*10 440 | J*y*11 441 | J*y*12 442 | J*y*13 443 | J*y*14 444 | J*y*15 445 | J*y*16 446 | J*y*17 447 | J*y*18 448 | J*y*19 449 | J*y*20 450 | J*y*21 451 | J*y*22 452 | J*y*23 453 | J*y*24 454 | J*y*25 455 | J*y*26 456 | J*y*27 457 | J*y*28 458 | J*y*29 459 | J*y*30 460 | J*y*31 461 | J*y*32 462 | B*_B*k 463 | B*_F*r 464 | B*_R*e*h 465 | B*_S*p 466 | B*_S*c 467 | B*_F*t 468 | B*_H*m 469 | V*_M*e 470 | V*_D*n 471 | V*_U 472 | M*_N*x 473 | M*_P 474 | M*_S*p 475 | M*_P*_P 476 | L*_M*l 477 | L*_M*a 478 | L*_A*1 479 | L*_A*2 480 | 481 | ) 482 | IfEqual,what,keys 483 | Rvar= 484 | ( 485 | Numpad0 486 | Numpad1 487 | Numpad2 488 | Numpad3 489 | Numpad4 490 | Numpad5 491 | Numpad6 492 | Numpad7 493 | Numpad8 494 | Numpad9 495 | F13 496 | F14 497 | F15 498 | F16 499 | F17 500 | F18 501 | F19 502 | F20 503 | F21 504 | F22 505 | F23 506 | F24 507 | NumpadIns 508 | NumpadEnd 509 | NumpadDown 510 | NumpadPgDn 511 | NumpadLeft 512 | NumpadClear 513 | NumpadRight 514 | NumpadHome 515 | NumpadUp 516 | NumpadPgUp 517 | NumpadDel 518 | Joy1 519 | Joy2 520 | Joy3 521 | Joy4 522 | Joy5 523 | Joy6 524 | Joy7 525 | Joy8 526 | Joy9 527 | Joy10 528 | Joy11 529 | Joy12 530 | Joy13 531 | Joy14 532 | Joy15 533 | Joy16 534 | Joy17 535 | Joy18 536 | Joy19 537 | Joy20 538 | Joy21 539 | Joy22 540 | Joy23 541 | Joy24 542 | Joy25 543 | Joy26 544 | Joy27 545 | Joy28 546 | Joy29 547 | Joy30 548 | Joy31 549 | Joy32 550 | Browser_Back 551 | Browser_Forward 552 | Browser_Refresh 553 | Browser_Stop 554 | Browser_Search 555 | Browser_Favorites 556 | Browser_Home 557 | Volume_Mute 558 | Volume_Down 559 | Volume_Up 560 | Media_Next 561 | Media_Prev 562 | Media_Stop 563 | Media_Play_Pause 564 | Launch_Mail 565 | Launch_Media 566 | Launch_App1 567 | Launch_App2 568 | 569 | ) 570 | } 571 | ;<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 572 | return, Rvar 573 | } -------------------------------------------------------------------------------- /lib/TT_Console.ahk: -------------------------------------------------------------------------------- 1 | /* 2 | TT_Console() v0.03 3 | Use Tooltip as a User Interface 4 | 5 | By: 6 | Avi Aryan 7 | 8 | Info: 9 | keys - stores space separated values of keys that are prompted for a user input 10 | font_options - Font options as in Gui ( eg -> s8 bold underline ) 11 | font_face - Font face names. Separate them by a | to set prority 12 | 13 | Returns > 14 | The key which has been pressed 15 | */ 16 | 17 | ;EXAMPLE 18 | ;a := TT_Console( "Hi`nPress Y to see another message.`nPress N to exit script", "y n", empty_var, empty_var, 1, "s12", "Arial|Consolas") 19 | ;if a = y 20 | ;... 21 | ;return 22 | 23 | 24 | TT_Console(msg, keys, x="", y="", fontops="", fontname="", whichtooltip=1, followMouse=0) { 25 | 26 | hFont := getHFONT(fontops, fontname) 27 | TooltipEx(msg, x, y, whichtooltip, hFont) 28 | 29 | ;create hotkeys 30 | loop, parse, keys, %A_space%, %a_space% 31 | hkZ(A_LoopField, "TT_Console_Check", 1) 32 | 33 | is_TTkey_pressed := 0 34 | while !is_TTkey_pressed 35 | { 36 | if followMouse 37 | { 38 | TooltipEx(msg,,, whichtooltip) 39 | sleep 100 40 | } else { 41 | sleep 20 42 | } 43 | } 44 | 45 | TooltipEx(,,, whichtooltip) 46 | 47 | loop, parse, keys, %A_space%, %a_space% 48 | hkZ(A_LoopField, "TT_Console_Check", 0) 49 | 50 | return what_pressed 51 | 52 | 53 | TT_Console_Check: 54 | what_pressed := A_ThisHotkey 55 | is_TTkey_pressed := 1 56 | return 57 | } 58 | 59 | -------------------------------------------------------------------------------- /lib/TooltipEx.ahk: -------------------------------------------------------------------------------- 1 | ; ====================================================================================================================== 2 | ; ToolTipEx() Display ToolTips with custom fonts and colors. 3 | ; Code based on the original AHK ToolTip implementation in Script2.cpp. 4 | ; Tested with: AHK 1.1.15.04 (A32/U32/U64) 5 | ; Tested on: Win 8.1 Pro (x64) 6 | ; Change history: 7 | ; 1.1.01.00/2014-08-30/just me - fixed bug preventing multiline tooltips. 8 | ; 1.1.00.00/2014-08-25/just me - added icon support, added named function parameters. 9 | ; 1.0.00.00/2014-08-16/just me - initial release. 10 | ; Parameters: 11 | ; Text - the text to display in the ToolTip. 12 | ; If omitted or empty, the ToolTip will be destroyed. 13 | ; X - the X position of the ToolTip. 14 | ; Default: "" (mouse cursor) 15 | ; Y - the Y position of the ToolTip. 16 | ; Default: "" (mouse cursor) 17 | ; WhichToolTip - the number of the ToolTip. 18 | ; Values: 1 - 20 19 | ; Default: 1 20 | ; HFONT - a HFONT handle of the font to be used. 21 | ; Default: 0 (default font) 22 | ; BgColor - the background color of the ToolTip. 23 | ; Values: RGB integer value or HTML color name. 24 | ; Default: "" (default color) 25 | ; TxColor - the text color of the TooöTip. 26 | ; Values: RGB integer value or HTML color name. 27 | ; Default: "" (default color) 28 | ; HICON - the icon to display in the upper-left corner of the TooöTip. 29 | ; This can be the number of a predefined icon (1 = info, 2 = warning, 3 = error - add 3 to 30 | ; display large icons on Vista+) or a HICON handle. Specify 0 to remove an icon from the ToolTip. 31 | ; Default: "" (no icon) 32 | ; CoordMode - the coordinate mode for the X and Y parameters, if specified. 33 | ; Values: "C" (Client), "S" (Screen), "W" (Window) 34 | ; Default: "W" (CoordMode, ToolTip, Window) 35 | ; Return values: 36 | ; On success: The HWND of the ToolTip window. 37 | ; On failure: False (ErrorLevel contains additional informations) 38 | ; ====================================================================================================================== 39 | 40 | ToolTipEx(Text:="", X:="", Y:="", WhichToolTip:=1, HFONT:="", BgColor:="", TxColor:="", HICON:="", CoordMode:="W") { 41 | ; ToolTip messages 42 | Static ADDTOOL := A_IsUnicode ? 0x0432 : 0x0404 ; TTM_ADDTOOLW : TTM_ADDTOOLA 43 | Static BKGCOLOR := 0x0413 ; TTM_SETTIPBKCOLOR 44 | Static MAXTIPW := 0x0418 ; TTM_SETMAXTIPWIDTH 45 | Static SETMARGN := 0x041A ; TTM_SETMARGIN 46 | Static SETTHEME := 0x200B ; TTM_SETWINDOWTHEME 47 | Static SETTITLE := A_IsUnicode ? 0x0421 : 0x0420 ; TTM_SETTITLEW : TTM_SETTITLEA 48 | Static TRACKACT := 0x0411 ; TTM_TRACKACTIVATE 49 | Static TRACKPOS := 0x0412 ; TTM_TRACKPOSITION 50 | Static TXTCOLOR := 0x0414 ; TTM_SETTIPTEXTCOLOR 51 | Static UPDTIPTX := A_IsUnicode ? 0x0439 : 0x040C ; TTM_UPDATETIPTEXTW : TTM_UPDATETIPTEXTA 52 | ; Other constants 53 | Static MAX_TOOLTIPS := 20 ; maximum number of ToolTips to appear simultaneously 54 | Static SizeTI := (4 * 6) + (A_PtrSize * 6) ; size of the TOOLINFO structure 55 | Static OffTxt := (4 * 6) + (A_PtrSize * 3) ; offset of the lpszText field 56 | Static TT := [] ; ToolTip array 57 | ; HTML Colors (BGR) 58 | Static HTML := {AQUA: 0xFFFF00, BLACK: 0x000000, BLUE: 0xFF0000, FUCHSIA: 0xFF00FF, GRAY: 0x808080, GREEN: 0x008000 59 | , LIME: 0x00FF00, MAROON: 0x000080, NAVY: 0x800000, OLIVE: 0x008080, PURPLE: 0x800080, RED: 0x0000FF 60 | , SILVER: 0xC0C0C0, TEAL: 0x808000, WHITE: 0xFFFFFF, YELLOW: 0x00FFFF} 61 | ; ------------------------------------------------------------------------------------------------------------------- 62 | ; Init TT on first call 63 | If (TT.MaxIndex() = "") 64 | Loop, 20 65 | TT[A_Index] := {HW: 0, IC: 0, TX: ""} 66 | ; ------------------------------------------------------------------------------------------------------------------- 67 | ; Check params 68 | TTTX := Text 69 | TTXP := X 70 | TTYP := Y 71 | TTIX := WhichToolTip = "" ? 1 : WhichToolTip 72 | TTHF := HFONT = "" ? 0 : HFONT 73 | TTBC := BgColor 74 | TTTC := TxColor 75 | TTIC := HICON 76 | TTCM := CoordMode = "" ? "W" : SubStr(CoordMode, 1, 1) 77 | If TTXP Is Not Digit 78 | Return False, ErrorLevel := "Invalid parameter X-position!", False 79 | If TTYP Is Not Digit 80 | Return False, ErrorLevel := "Invalid parameter Y-Position!", False 81 | If (TTIX < 1) || (TTIX > MAX_TOOLTIPS) 82 | Return False, ErrorLevel := "Max ToolTip number is " . MAX_TOOLTIPS . ".", False 83 | If (TTHF) && !(DllCall("Gdi32.dll\GetObjectType", "Ptr", TTHF, "UInt") = 6) ; OBJ_FONT 84 | Return False, ErrorLevel := "Invalid font handle!", False 85 | If TTBC Is Integer 86 | TTBC := ((TTBC >> 16) & 0xFF) | (TTBC & 0x00FF00) | ((TTBC & 0xFF) << 16) 87 | Else 88 | TTBC := HTML.HasKey(TTBC) ? HTML[TTBC] : "" 89 | If TTTC Is Integer 90 | TTTC := ((TTTC >> 16) & 0xFF) | (TTTC & 0x00FF00) | ((TTTC & 0xFF) << 16) 91 | Else 92 | TTTC := HTML.HasKey(TTTC) ? HTML[TTTC] : "" 93 | If !InStr("CSW", TTCM) 94 | Return False, ErrorLevel := "Invalid parameter CoordMode!", False 95 | ; ------------------------------------------------------------------------------------------------------------------- 96 | ; Destroy the ToolTip window, if Text is empty 97 | TTHW := TT[TTIX].HW 98 | If (TTTX = "") && (TTHW) { 99 | If DllCall("User32.dll\IsWindow", "Ptr", TTHW, "UInt") 100 | DllCall("User32.dll\DestroyWindow", "Ptr", TTHW) 101 | TT[TTIX] := {HW: 0, TX: ""} 102 | Return True 103 | } 104 | ; ------------------------------------------------------------------------------------------------------------------- 105 | ; Get the virtual desktop rectangle 106 | SysGet, X, 76 107 | SysGet, Y, 77 108 | SysGet, W, 78 109 | SysGet, H, 79 110 | DTW := {L: X, T: Y, R: X + W, B: Y + H} 111 | ; ------------------------------------------------------------------------------------------------------------------- 112 | ; Initialise the ToolTip coordinates. If either X or Y is empty, use the cursor position for the present. 113 | PT := {X: 0, Y: 0} 114 | If (TTXP = "") || (TTYP = "") { 115 | VarSetCapacity(Cursor, 8, 0) 116 | DllCall("User32.dll\GetCursorPos", "Ptr", &Cursor) 117 | Cursor := {X: NumGet(Cursor, 0, "Int"), Y: NumGet(Cursor, 4, "Int")} 118 | PT := {X: Cursor.X + 16, Y: Cursor.Y + 16} 119 | } 120 | ; ------------------------------------------------------------------------------------------------------------------- 121 | ; If either X or Y is specified, get the position of the active window considering CoordMode. 122 | Origin := {X: 0, Y: 0} 123 | If ((TTXP <> "") || (TTYP <> "")) && ((TTCM = "W") || (TTCM = "C")) { ; if (*aX || *aY) // Need the offsets. 124 | HWND := DllCall("User32.dll\GetForegroundWindow", "UPtr") 125 | If (TTCM = "W") { 126 | WinGetPos, X, Y, , , ahk_id %HWND% 127 | Origin := {X: X, Y: Y} 128 | } 129 | Else { 130 | VarSetCapacity(OriginPT, 8, 0) 131 | DllCall("User32.dll\ClientToScreen", "Ptr", HWND, "Ptr", &OriginPT) 132 | Origin := {X: NumGet(OriginPT, 0, "Int"), Y: NumGet(OriginPT, 0, "Int")} 133 | } 134 | } 135 | ; ------------------------------------------------------------------------------------------------------------------- 136 | ; If either X or Y is specified, use the window related position for this parameter. 137 | If (TTXP <> "") 138 | PT.X := TTXP + Origin.X 139 | If (TTYP <> "") 140 | PT.Y := TTYP + Origin.Y 141 | ; ------------------------------------------------------------------------------------------------------------------- 142 | ; Create and fill a TOOLINFO structure. 143 | TT[TTIX].TX := "T" . TTTX ; prefix with T to ensure it will be stored as a string in either case 144 | VarSetCapacity(TI, SizeTI, 0) ; TOOLINFO structure 145 | NumPut(SizeTI, TI, 0, "UInt") 146 | NumPut(0x0020, TI, 4, "UInt") ; TTF_TRACK 147 | NumPut(TT[TTIX].GetAddress("TX") + (1 << !!A_IsUnicode), TI, OffTxt, "Ptr") 148 | ; ------------------------------------------------------------------------------------------------------------------- 149 | ; If the ToolTip window doesn't exist, create it. 150 | If !(TTHW) || !DllCall("User32.dll\IsWindow", "Ptr", TTHW, "UInt") { 151 | ; ExStyle = WS_TOPMOST, Style = TTS_NOPREFIX | TTS_ALWAYSTIP 152 | TTHW := DllCall("User32.dll\CreateWindowEx", "UInt", 8, "Str", "tooltips_class32", "Ptr", 0, "UInt", 3 153 | , "Int", 0, "Int", 0, "Int", 0, "Int", 0, "Ptr", A_ScriptHwnd, "Ptr", 0, "Ptr", 0, "Ptr", 0) 154 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", ADDTOOL, "Ptr", 0, "Ptr", &TI) 155 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", MAXTIPW, "Ptr", 0, "Ptr", A_ScreenWidth) 156 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", TRACKPOS, "Ptr", 0, "Ptr", PT.X | (PT.Y << 16)) 157 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", TRACKACT, "Ptr", 1, "Ptr", &TI) 158 | } 159 | ; ------------------------------------------------------------------------------------------------------------------- 160 | ; Update the text and the font and colors, if specified. 161 | If (TTBC <> "") || (TTTC <> "") { ; colors 162 | DllCall("UxTheme.dll\SetWindowTheme", "Ptr", TTHW, "Ptr", 0, "Str", "") 163 | VarSetCapacity(RC, 16, 0) 164 | NumPut(4, RC, 0, "Int"), NumPut(4, RC, 4, "Int"), NumPut(4, RC, 8, "Int"), NumPut(1, RC, 12, "Int") 165 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", SETMARGN, "Ptr", 0, "Ptr", &RC) 166 | If (TTBC <> "") 167 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", BKGCOLOR, "Ptr", TTBC, "Ptr", 0) 168 | If (TTTC <> "") 169 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", TXTCOLOR, "Ptr", TTTC, "Ptr", 0) 170 | } 171 | If (TTIC <> "") 172 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", SETTITLE, "Ptr", TTIC, "Str", " ") 173 | If (TTHF) ; font 174 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", 0x0030, "Ptr", TTHF, "Ptr", 1) ; WM_SETFONT 175 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", UPDTIPTX, "Ptr", 0, "Ptr", &TI) 176 | ; ------------------------------------------------------------------------------------------------------------------- 177 | ; Get the ToolTip window dimensions. 178 | VarSetCapacity(RC, 16, 0) 179 | DllCall("User32.dll\GetWindowRect", "Ptr", TTHW, "Ptr", &RC) 180 | TTRC := {L: NumGet(RC, 0, "Int"), T: NumGet(RC, 4, "Int"), R: NumGet(RC, 8, "Int"), B: NumGet(RC, 12, "Int")} 181 | TTW := TTRC.R - TTRC.L 182 | TTH := TTRC.B - TTRC.T 183 | ; ------------------------------------------------------------------------------------------------------------------- 184 | ; Check if the Tooltip will be partially outside the virtual desktop and adjust the position, if necessary. 185 | If (PT.X + TTW >= DTW.R) 186 | PT.X := DTW.R - TTW - 1 187 | If (PT.Y + TTH >= DTW.B) 188 | PT.Y := DTW.B - TTH - 1 189 | ; ------------------------------------------------------------------------------------------------------------------- 190 | ; Check if the cursor is inside the ToolTip window and adjust the position, if necessary. 191 | If (TTXP = "") || (TTYP = "") { 192 | TTRC.L := PT.X, TTRC.T := PT.Y, TTRC.R := TTRC.L + TTW, TTRC.B := TTRC.T + TTH 193 | If (Cursor.X >= TTRC.L) && (Cursor.X <= TTRC.R) && (Cursor.Y >= TTRC.T) && (Cursor.Y <= TTRC.B) 194 | PT.X := Cursor.X - TTW - 3, PT.Y := Cursor.Y - TTH - 3 195 | } 196 | ; ------------------------------------------------------------------------------------------------------------------- 197 | ; Show the Tooltip using the final coordinates. 198 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", TRACKPOS, "Ptr", 0, "Ptr", PT.X | (PT.Y << 16)) 199 | DllCall("User32.dll\SendMessage", "Ptr", TTHW, "UInt", TRACKACT, "Ptr", 1, "Ptr", &TI) 200 | TT[TTIX].HW := TTHW 201 | Return TTHW 202 | } 203 | -------------------------------------------------------------------------------- /lib/WM_MOUSEMOVE.ahk: -------------------------------------------------------------------------------- 1 | /* 2 | WM_MOUSEMOVE() v0.01 3 | Callback to enable ToolTips for Controls 4 | Called whenever the mouse hovers over a control, this function shows a tooltip for the control over 5 | which it is hovering. The tooltip text is specified in a global variable called variableOfControl_TT 6 | 7 | By: 8 | Avi Aryan 9 | Extracted from "Settings GUI Plug.ahk" to make it more public 10 | */ 11 | 12 | WM_MOUSEMOVE() 13 | ; 14 | { 15 | static currControl, prevControl, _TT ; _TT is kept blank for use by the ToolTip command below. 16 | 17 | ;--- Descriptions -------------- 18 | 19 | ; **** Settings GUI ************************** 20 | NEW_LIMITMAXCLIPS_TT := TXT.SET_T_limitmaxclips 21 | NEW_MAXCLIPS_TT := TXT.SET_T_maxclips 22 | NEW_THRESHOLD_TT := TXT.SET_T_threshold 23 | NEW_COPYBEEP_TT := TXT.SET_T_copybeep 24 | NEW_QUALITY_TT := TXT.SET_T_quality 25 | NEW_KEEPSESSION_TT := TXT.SET_T_keepsession 26 | NEW_ISMESSAGE_TT := TXT.SET_T_ismessage 27 | new_default_pformat_TT := TXT.SET_T_pformat 28 | NEW_DAYSTOSTORE_TT := TXT.SET_T_daystostore 29 | NEW_ISIMAGESTORED_TT := TXT.SET_T_images 30 | pst_k_TT := TXT.SET_T_pst 31 | actmd_k_TT := TXT.SET_T_actmd 32 | chnl_K_TT := TXT.SET_T_chnl 33 | cfilep_K_TT := TXT.SET_T_cfilep 34 | cfolderp_K_TT := TXT.SET_T_cfolderp 35 | cfiled_K_TT := TXT.SET_T_cfiled 36 | hldClip_K_TT := TXT.SET_T_holdClip 37 | PITSWP_K_TT := TXT.SET_T_pitswp 38 | NEW_ischannelmin_TT := TXT.SET_T_ischannelmin 39 | plugM_k_TT := TXT.SET_t_PLUGM 40 | new_PreserveClipPos_TT := TXT.SET_T_keepactivepos 41 | org_K_TT := TXT.SET_org 42 | new_startSearch_TT := TXT.SET_T_startSearch 43 | new_revFormat2def_TT := TXT.SET_T_revFormat2def 44 | hst_K_TT := TXT.SET_T_histshort 45 | new_winClipjump_TT := TXT.SET_T_winClipjump 46 | 47 | ; **** Channel Organizer ********************* 48 | chOrgToggleLeftRight_TT := TXT.ORG_toggleLeftRight 49 | chOrg_search_TT := TXT.ORG_search 50 | chorgNew_TT := TXT.ORG_createnew 51 | chOrgUp_TT := TXT.ORG_up 52 | chOrgDown_TT := TXT.ORG_down 53 | chOrgEdit_TT := TXT.ORG_edit 54 | chorg_openPastemode_TT := TXT.ORG_openPastemode 55 | chOrg_props_TT := TXT.ORG_props 56 | chOrgCut_TT := TXT.ORG_cut 57 | chOrgCopy_TT := TXT.ORG_copy 58 | chOrgDelete_TT := TXT.ORG_delete 59 | 60 | ;--------------------------------------------- 61 | 62 | currControl := A_GuiControl 63 | If (currControl <> prevControl and !InStr(currControl, " ") and !Instr(currControl, "&")) 64 | { 65 | ToolTip, ,,, 4 ;remove the old Tooltip 66 | global Text_TT := %currControl%_TT 67 | SetTimer, DisplayToolTip, 650 68 | prevControl := currControl 69 | } 70 | return 71 | 72 | DisplayToolTip: 73 | SetTimer, DisplayToolTip, Off 74 | ToolTip, % Text_TT,,, 4 ; The leading percent sign tell it to use an expression. 75 | SetTimer, RemoveToolTip, 8000 76 | return 77 | 78 | removeToolTip: 79 | SetTimer, removeToolTip, Off 80 | ToolTip, ,,, 4 81 | return 82 | } -------------------------------------------------------------------------------- /lib/aboutGUI.ahk: -------------------------------------------------------------------------------- 1 | ;The About GUI for Clipjump 2 | 3 | aboutGUI(){ 4 | 5 | global 6 | static w_ofreset, w_versiontxt, versiontxt 7 | ;About GUI 8 | w_ofreset := getControlinfo("button", TXT.ABT_reset, "w", "s10", "Arial") 9 | w_versiontxt := getControlinfo("Link", versiontxt := "" PROGNAME " v" version, "w", "s18", "Consolas") 10 | 11 | Gui, 2:Destroy 12 | Gui, 2:Margin, 0, 0 13 | Gui, 2:Font, s18, Courier New 14 | Gui, 2:Font, S18, Consolas 15 | Gui, 2:Add, Edit, x0 y0 w0 h0, 16 | Gui, 2:Add, Link, % "x" (522-w_versiontxt)/2 " y5 gupdt", % versiontxt 17 | Gui, 2:Font, S12, 18 | Gui, 2:Add, Link, x180 y+3 gblog, Avi Aryan (C) %A_year% 19 | 20 | Gui, 2:Font, S11 norm, Arial 21 | Gui, 2:Add, Text, y+30 x10, % TXT._language 22 | Gui, 2:Font, s9 23 | Gui, 2:Add, DropDownList, yp x+20 vini_LANG gupdateLang, 24 | Translations_loadlist() ;loads the list in the above ddl 25 | 26 | Gui, 2:Font, s11, Courier New 27 | Gui, 2:Add, Groupbox, x7 y130 w540 h100, % TXT.ABT__name 28 | Gui, 2:Font, S10, Arial 29 | 30 | Gui, 2:Add, Text, xp+10 y160 wp-10, % TXT.ABT_info 31 | 32 | Gui, 2:Font, S10, Arial 33 | Gui, 2:Add, Button, xp-10 y+60 w70 g2GuiClose Default, OK 34 | Gui, 2:Add, Button, % "x" 552-w_ofreset-5 " yp greset", % TXT.ABT_reset ;leaving 5 as margin 35 | Gui, 2:Add, Text, y+0 h0, 36 | 37 | Gui, 2:Show, w552, % PROGNAME " [ Channel: " CN.Name " ]" 38 | return 39 | 40 | blog: 41 | BrowserRun(AUTHOR_PAGE) 42 | return 43 | 44 | 2GuiEscape: 45 | 2GuiClose: 46 | Gui, 2:Hide 47 | EmptyMem() 48 | return 49 | 50 | updateLang: 51 | Gui, 2:submit, nohide 52 | TXT := Translations_load("languages/" ini_LANG ".txt") 53 | Translations_apply() 54 | ini_write("System", "Lang", ini_LANG, 0) 55 | return 56 | 57 | reset: 58 | MsgBox, 20, Warning, % TXT.ABT_resetM 59 | IfMsgBox, Yes 60 | { 61 | FileRemoveDir, cache, 1 62 | FileDelete, settings.ini 63 | FileDelete, ClipjumpCustom.ini 64 | if A_IsCompiled 65 | FileRemoveDir, icons, 1 66 | IfExist, %A_Startup%/Clipjump.lnk 67 | { 68 | MsgBox, 52, Resetting %PROGNAME%,% TXT.ABT_removeStart 69 | IfMsgBox, Yes 70 | FileDelete, %A_Startup%/Clipjump.lnk 71 | } 72 | MsgBox, 64, Reset Complete, % PROGNAME " " TXT.ABT_resetfinal 73 | OnExit, 74 | ExitApp 75 | } 76 | return 77 | } 78 | 79 | trayMenu(destroy=0){ 80 | global 81 | 82 | if destroy 83 | { 84 | Menu, Tray, DeleteAll 85 | Menu, Options_Tray, Delete 86 | Menu, Tools_Tray, Delete 87 | Menu, Maintanence_Tray, Delete 88 | Menu, Help_Tray, Delete 89 | } 90 | 91 | ;Tray Icon 92 | Menu, Tray, Icon, % mainIconPath 93 | Menu, Tray, NoStandard 94 | Menu, Tray, Add, % TXT.ABT__name " " PROGNAME, main 95 | Menu, Tray, Tip, % PROGNAME " {" CN.Name "}" 96 | Menu, Tray, Add 97 | Menu, Tray, Add,% TXT.SET_actmd "`t" Hparse_Rev(actionmode_k), actionmode 98 | Menu, Tray, Add ; separator 99 | Menu, Maintanence_Tray, Add, % TXT.PLG_delFileFolder, plugin_deleteFileFolder 100 | Menu, Maintanence_Tray, Add, % TXT.TRY_updates, updt 101 | Menu, Tray, Add, % TXT._maintenance, :Maintanence_Tray 102 | Menu, Options_Tray, Add, % TXT.TRY_incognito, incognito 103 | Menu, Options_Tray, Add, % TXT.TRY_disable " " PROGNAME, disable_clipjump 104 | Menu, Options_Tray, Add, % TXT.TRY_startup, strtup 105 | Menu, Tray, Add, % TXT.TRY_options, :Options_Tray 106 | Menu, Tools_Tray, Add, % TXT.SET_org "`t" Hparse_Rev(chOrg_K), channelOrganizer 107 | Menu, Tools_Tray, Add, % TXT.HST__name "`t" Hparse_Rev(history_K), history 108 | Menu, Tools_Tray, Add, % TXT.IGN__name, classTool 109 | Menu, Tools_Tray, Add, % TXT.PLG__name "`t" Hparse_Rev(pluginManager_k), pluginManagerGUI 110 | Menu, Tools_Tray, Add, % TXT.SET__name, settings 111 | Menu, Tray, Add, % TXT.TRY_tools, :Tools_Tray 112 | Menu, Help_Tray, Add, % TXT.TRY_pstmdshorts, openShortcutsHelp 113 | Menu, Help_Tray, Add, % "FAQ", openFaq 114 | Menu, Help_Tray, Add 115 | Menu, Help_Tray, Add, % "Clipjump.chm", hlp 116 | Menu, Tray, Add 117 | Menu, Tray, Add, % TXT.TRY_help, :Help_Tray 118 | Menu, Tray, Add 119 | Menu, Tray, Add, % TXT.TRY_reloadcustom, reloadCustom 120 | Menu, Tray, Add, % TXT.TRY_restart, reload 121 | Menu, Tray, Add, % TXT.TRY_exit, exit 122 | Menu, Tray, Default, % TXT.ABT__name " " PROGNAME 123 | return 124 | 125 | } 126 | 127 | openFaq: 128 | try run hh.exe mk:@MSITStore:%A_WorkingDir%\Clipjump.chm::/docs/faq.html 129 | catch 130 | MsgBox, 16, % PROGNAME, % TXT.ABT_chmErr 131 | return 132 | 133 | openShortcutsHelp: 134 | try run hh.exe mk:@MSITStore:%A_WorkingDir%\Clipjump.chm::/docs/shortcuts.html#pstmd 135 | catch 136 | MsgBox, 16, % PROGNAME, % TXT.ABT_chmErr 137 | return 138 | 139 | reload: 140 | OnExit, 141 | routines_Exit() 142 | Reload 143 | return -------------------------------------------------------------------------------- /lib/customizer.ahk: -------------------------------------------------------------------------------- 1 | ; Customizer 2 | /* 3 | What is supported? 4 | k = %func()% 5 | a.b = %func()% 6 | a.b = some_string is supported (Obviously) 7 | a.b = %c.d% 8 | */ 9 | 10 | 11 | /** 12 | * loads customs from the ClipjumpCustom.ini file 13 | * @return {void} 14 | */ 15 | loadCustomizations(){ 16 | if !FileExist("ClipjumpCustom.ini") { 17 | FileAppend, % ";Customizer File for Clipjump`n;Add your custom settings here`n`n[AutoRun]`n;auto-run items go here", ClipjumpCustom.ini 18 | return 19 | } 20 | f := "ClipjumpCustom.ini" 21 | 22 | IniRead, o, % f ; load sections 23 | loop, parse, o,`n, %A_space% 24 | { 25 | Iniread, s, % f, % A_LoopField ; read that section 26 | tobj := {} 27 | 28 | loop, parse, s,`n, %A_Space% 29 | { ; read each key 30 | a := "" 31 | loop % 3-Strlen(A_index) 32 | a .= "0" 33 | a .= A_index 34 | k := Trim( Substr(A_LoopField, 1, p:=Instr(A_LoopField, "=")-1) ) , v := Trim( Substr(A_LoopField, p+2) ) 35 | if k=bind 36 | tobj.bind := v 37 | else if k=noautorun 38 | tobj.noautorun := v 39 | else tobj[a k] := v 40 | } 41 | if !(tobj.noautorun) && (tobj.bind = "") && !startUpComplete 42 | customization_Run(tobj) 43 | else if (tobj.bind != "") && (tobj.noautorun == 0) && !startUpComplete 44 | customization_Run(tobj) 45 | if Hparse(tobj.bind) ; if key is valid 46 | hkZ( tobj.bind := "$" Hparse(tobj.bind), "CustomHotkey", 1 ) ; create hotkey 47 | , CUSTOMS[tobj.bind] := {} 48 | , CUSTOMS[tobj.bind] := tobj.Clone() 49 | CUSTOMS["_" A_LoopField] := tobj.Clone() ; store section object for use later 50 | } 51 | } 52 | 53 | 54 | /** 55 | * reset all customizations applied in Clipjump, including the hotkey bindings 56 | * @return {void} 57 | */ 58 | resetCustomizations(){ 59 | for k,v in CUSTOMS 60 | { 61 | if InStr(k, "_") != 1 62 | hkZ(v.bind, "CustomHotkey", 0) ; unregister hk 63 | } 64 | CUSTOMS := {} 65 | } 66 | 67 | 68 | /** 69 | * runs a customization (the section) 70 | * @param {array} obj customization object containing key-value pairs of commands in it 71 | * @return {void} 72 | */ 73 | customization_Run(obj){ 74 | for k,v in obj 75 | { 76 | k := Ltrim(k, "0123456789") ; correct key 77 | isf := ((k=="run") && Instr(v,"(")) 78 | loop { ; change %..% vars to keys 79 | if !($op1 := Instr(v, "%", 0, 1, 1)) || !($op2 := Instr(v, "%", 0, 1, 2)) 80 | break 81 | $match := Substr(v, $op1, $op2-$op1+1) 82 | $var := Substr($match,2,-1) 83 | 84 | if RegExMatch($var, "iU)^[^ `t]+\(.*\)$") 85 | $var := RunFunc($var) 86 | else if Instr($var, ".") 87 | { 88 | loop, parse, $var,`. 89 | $j%A_index% := Trim(A_LoopField) , $n := A_index-1 90 | if $n=1 91 | $var := %$j1%[$j2] 92 | if $n=2 93 | $var := %$j1%[$j2][$j3] 94 | } 95 | else $var := %$var% 96 | StringReplace, v, v, % $match, % ( isf ? """" $var """" : $var ) 97 | } 98 | 99 | if k = run 100 | { 101 | if !Instr(v, "(") 102 | gosub % IsLabel(v) ? v : "keyblocker" 103 | else 104 | ans := RunFunc(v) 105 | } 106 | else if k = tip 107 | autoTooltip(v, 1000, 8) 108 | else if k = send 109 | SendInput, % RegExMatch( g:=HParse(v), "[#!\^\+]" ) = 1 ? g : v ; parse keys like Ctrl+Alt+k 110 | else if k = sleep 111 | sleep % v 112 | else if (k != "bind") or (k != "noautorun") 113 | { 114 | if Instr(k,".") 115 | { 116 | loop, parse, k,`. 117 | $j%A_index% := Trim(A_LoopField) , $n := A_index-1 118 | if $n=1 119 | %$j1%[$j2] := v 120 | if $n=2 121 | %$j1%[$j2][$j3] := v 122 | } 123 | else %k% := v 124 | } 125 | } 126 | } 127 | 128 | 129 | /** 130 | * runs a function in a string 131 | * @param {string} v function string 132 | * @Return output of function 133 | */ 134 | RunFunc(v){ 135 | ; runs dynamic functions 136 | static rk := "ª" 137 | static dq := "§" 138 | 139 | fn := Substr(v, 1, Instr(v,"(")-1) 140 | pms := Substr(v, Instr(v,"(")+1, -1) , ps := {} 141 | ; loop, parse, pms,`,, %A_Space% 142 | ; ps.Insert( RegExReplace(A_LoopField, rk, ",") ) 143 | StringReplace, pms, pms, % """""", % dq, All 144 | pmsbk := Trim(pms) 145 | 146 | while (Trim(pmsbk) != ""){ 147 | if ( Instr(pmsbk, """") == 1 ){ 148 | endb := Instr(pmsbk, """", 0, 2) 149 | z1 := RegExReplace( Substr(pmsbk, 2, endb-2) , rk, ",") 150 | ps.Insert( RegExReplace(z1, dq, """") ) 151 | pmsbk := Substr(pmsbk, endb+1) ; skip quotes 152 | pmsbk := Trim(pmsbk) ; --- 153 | pmsbk := Substr(pmsbk, 2) ; and then comma 154 | } else { ; comma separated params 155 | endb := !Instr(pmsbk, ",")?10000:Instr(pmsbk, ",") 156 | z1 := RegExReplace( Substr(pmsbk, 1, endb-1) , rk, ",") 157 | ps.Insert(z1) 158 | pmsbk := Substr(pmsbk, endb+1) 159 | } 160 | } 161 | 162 | n := ps.MaxIndex() 163 | ; API functions 164 | if Instr(fn, "."){ 165 | str := "API:" , str .= Substr(fn, Instr(fn,".")+1) 166 | loop % n 167 | { 168 | temp := ps[A_Index] 169 | StringReplace, temp, temp, % "`r`n", % "`n", All 170 | StringReplace, temp, temp, % "`r", % "`n", All 171 | str .= "`r" temp 172 | } 173 | return r := Act_API(str, "API:") 174 | } 175 | ; else normal function 176 | if !n 177 | r := %fn%() 178 | else if n=1 179 | r := %fn%(ps.1) 180 | else if n=2 181 | r := %fn%(ps.1, ps.2) 182 | else if n=3 183 | r := %fn%(ps.1, ps.2, ps.3) 184 | else if n=4 185 | r := %fn%(ps.1, ps.2, ps.3, ps.4) 186 | return r 187 | } 188 | 189 | 190 | /** 191 | * The label to run any hotkey created in Clipjump Custom 192 | */ 193 | CustomHotkey: 194 | customization_Run( CUSTOMS[A_ThisHotkey] ) 195 | return -------------------------------------------------------------------------------- /lib/multi.ahk: -------------------------------------------------------------------------------- 1 | ;--------------------- CHANNELS FOR CLIPJUMP -------------------------- 2 | ;== IDEAS == 3 | ; TEMPSAVE, CURSAVE 4 | ; TOTALCLIPS 5 | ; 6 | ; Folders to be specified by N ("", 1, 2, 3) 7 | ; CN.TotalClips = unlimited for other modes (1, 2, 3, 4, 5, 6) and as specified in Ini for 0 channel 8 | ; CN.Name = name of channel 9 | ; CN.N = contains Folder names amendment of the active Channel 10 | ; CN.NG = contains real channel indexes 0,1,2 11 | ; CN.Total = Total number of channels 12 | ; CN.pit_NG = contains item active before the Pit swap 13 | ; 14 | ; out of these CN.Total and TEMPSAVE,CURSAVE are only permananent var, all others are temporarily created at channel change. 15 | ;---------------------------------------------------------------------- 16 | 17 | initChannels(){ 18 | global 19 | CN := {} 20 | loop, 21 | if FileExist("cache\clips" (T := (A_index-1)?A_index-1:"" ) ) 22 | { 23 | loop 24 | { 25 | IfNotExist, cache/Clips%T%/%A_Index%.avc 26 | { 27 | CN["TEMPSAVE" T] := CN["CURSAVE" T] := A_Index - 1 28 | break 29 | } 30 | } 31 | CN.Total := A_index 32 | } 33 | Else 34 | break 35 | CN.NG := 0 , CN.N := "" 36 | 37 | Iniread, temp, %CONFIGURATION_FILE%, channels, % CN.NG, %A_space% 38 | CN.Name := (temp=="") or (temp==A_temp) ? "Default" : temp 39 | ini_write("channels", "0", CN.Name) 40 | 41 | CN["TOTALCLIPS"] := TOTALCLIPS 42 | } 43 | 44 | changeChannel(cIndex, backup_old:=1){ 45 | ; changes channel 46 | ; creates new channel if needed 47 | if cIndex is not Integer 48 | return 0 49 | if ( cIndex == CN.Total ) ; new channel create 50 | { 51 | CN.Total+=1 , CDS[cIndex] := {} , CPS[cIndex] := {} ; create storage objs 52 | CN["TEMPSAVE" cIndex] := CN["CURSAVE" cIndex] := 0 53 | } else if ( cIndex > CN.Total ) 54 | return 0 55 | Iniread, temp, %CONFIGURATION_FILE%, channels, %cIndex%, %A_space% 56 | CN.Name := (temp=="") or (temp==A_temp) ? (!cIndex ? "Default" : cIndex) : temp 57 | 58 | if !cIndex 59 | TOTALCLIPS := CN["TOTALCLIPS"] 60 | , cIndex := "" 61 | else 62 | TOTALCLIPS := CN["TOTALCLIPS" cIndex] ? CN["TOTALCLIPS" cIndex] : 999999999999 ;if exist, use it 63 | 64 | if backup_old 65 | CN["TEMPSAVE" CN.N] := TEMPSAVE , CN["CURSAVE" CN.N] := CURSAVE , CN.prevCh := CN.NG ;Saving Old - TEMPSAVE is auto-corrected at 66 | ;the end of paste mode and so no need to fix it. 67 | CN.N := cIndex , CN.NG := !CN.N?0:CN.N ;note that cIndex has been emptied if 0 68 | 69 | TEMPSAVE := CN["TEMPSAVE" cIndex] + 0 , CURSAVE := CN["CURSAVE" cIndex] + 0 ;Restoring current 70 | 71 | T := Substr(CLIPS_dir, 0) 72 | if T is Integer 73 | CLIPS_dir := Substr(CLIPS_dir, 1, -1) , THUMBS_dir := Substr(THUMBS_dir, 1, -1) 74 | 75 | CLIPS_dir .= cIndex , THUMBS_dir .= cIndex 76 | 77 | FileCreateDir, %CLIPS_dir% 78 | FileCreateDir, %THUMBS_dir% 79 | 80 | LASTCLIP := LASTFORMAT := IScurCBACTIVE := "" ;make all false as they are different for other channels 81 | renameChannel(CN.NG, CN.Name) 82 | if WinExist(TXT.ORG__name " ahk_class AutoHotkeyGUI") ; change channel in ORG 83 | gosub chorg_addchUseList 84 | EmptyMem() 85 | return 1 86 | } 87 | 88 | renameChannel(ch, nm){ 89 | ini_write("Channels", ch, Trim(nm), 0) 90 | if ( CN.NG == ch ) 91 | { 92 | CN.Name := nm 93 | CopyMessage := !ini_IsMessage ? "" : MSG_TRANSFER_COMPLETE " {" CN.Name "}" 94 | Menu, Tray, Tip, % PROGNAME " {" CN.Name "}" 95 | } 96 | } 97 | 98 | ;--------------------------- select channel box -------------------------------------------------------------- 99 | 100 | choosechannelgui(guiname=""){ 101 | static channel_list 102 | if guiname= 103 | guiname := TXT.CHC_name 104 | channel_list := "" 105 | Gui, choosech:New 106 | Gui, choosech: +ToolWindow -MaximizeBox 107 | Gui, Add, Text, x7 y7, % TXT.CNL_choose 108 | lst := channel_find() 109 | StringReplace, lst, lst, |, ``|, All 110 | StringReplace, lst, lst, `n, |, All 111 | Gui, Add, Listbox, x+20 vchannel_list h150, % lst 112 | Gui, Add, button, x7 y+10 gchoosechbuttonok Default, OK 113 | Gui, Add, button, x+10 yp gchoosechbuttoncancel, % TXT.SET_cancel 114 | Gui, Show,, % guiname 115 | WinWaitActive, % guiname 116 | WinWaitClose, % guiname 117 | channel_list := Trim( Substr(channel_list, 1, Instr(channel_list, "-")-1) ) 118 | return is_notcancel ? "" : channel_list 119 | 120 | chooseChButtonOK: 121 | Gui, choosech:submit, nohide 122 | if channel_list 123 | Gui, choosech:Destroy 124 | return 125 | 126 | chooseChButtoncancel: 127 | choosechGuiClose: 128 | is_notcancel := "-" 129 | Gui, choosech:Destroy 130 | return 131 | } 132 | 133 | ;--------------------------- find a channel ------------------------------------------------------------------ 134 | 135 | channel_find(name=""){ 136 | local str, rINI 137 | ; returns list of channels if name is empty 138 | rINI := Ini2Obj(CONFIGURATION_FILE) 139 | name := Trim(name) 140 | 141 | if name is Number 142 | return name 143 | else if (name != "") 144 | { 145 | for k,v in rINI["Channels"] 146 | if v = %name% 147 | return k 148 | } 149 | else 150 | loop % CN.Total 151 | str .= A_index-1 " - " rINI["Channels"][A_index-1] "`n" 152 | return Rtrim( str, "`n" ) 153 | } 154 | 155 | ;--------------------------- Other functions ------------------------------------------------------ 156 | 157 | ; moves a channel or deletes it; in moving dest channel if exists is deleted 158 | manageChannel(orig, new=""){ 159 | static l := "clips thumbs" 160 | ;global CN 161 | 162 | if new= 163 | { 164 | if !orig 165 | return ; dnt delete 0 166 | loop, parse, l, % A_space 167 | FileRemoveDir, % "cache\" A_LoopField orig, 1 168 | ini_delete("Channels", orig) 169 | CDS[orig] := {} , CPS[orig] := {} 170 | ; move channels one step back 171 | c := 0 172 | loop % CN.Total-orig-1 173 | { 174 | c := A_index 175 | loop, parse, l, % A_space 176 | FileMoveDir, % "cache\" A_LoopField orig+c , % "cache\" A_LoopField orig+c-1, R 177 | CDS[orig+c-1] := CDS[orig+c] , CPS[orig+c-1] := CPS[orig+c] 178 | ini_write("Channels", orig+c-1, (z:=Ini_read("Channels", orig+c)) && (z != orig+c) ? z : orig+c-1, 0 ) 179 | } 180 | ;done ... final steps 181 | ini_delete("Channels", orig+c) , CDS[orig+c] := {} , CPS[orig+c] := {} ; delete any name to avoid confusion 182 | 183 | bk := CN.NG 184 | initChannels() 185 | if ( bk >= orig ) 186 | changeChannel(bk-1, 0) ; change the channel using proper methodology as initchannels() disturbs it 187 | else changeChannel(bk, 0) 188 | prefs2Ini() 189 | } 190 | else 191 | { 192 | ;NOT IMPLEMENTED YET - implement CDS also 193 | ;loop, parse, l, % A_space 194 | ; FileRemoveDir, % "cache\" A_LoopField new, 1 195 | ;loop, parse, l, % A_Space 196 | ; FileMoveDir, % "cache\" A_loopfield orig, % "cache\" A_loopfield new, R 197 | ;ini_write("Channels", new, (z:=Ini_read("Channels", orig)) ? z : new, 0 ) 198 | ;; final steps 199 | ;if CN.NG == orig 200 | ; changeChannel(new) 201 | } 202 | } 203 | 204 | ;-------------------------- ACCESSIBILTY SHORTCUTS ------------------------------------------------ 205 | 206 | ; #if IsActive(PROGNAME " " TXT.CNL__name, "window") 207 | ; Up:: 208 | ; GuiControl, channel:, ChannelUpdown, +1 209 | ; gosub, ChannelUpdown 210 | ; return 211 | ; Down:: 212 | ; GuiControl, channel:, ChannelUpdown, +-1 213 | ; gosub, ChannelUpdown 214 | ; return 215 | ; #if -------------------------------------------------------------------------------- /lib/pluginManager.ahk: -------------------------------------------------------------------------------- 1 | /* 2 | Plugin management Routines 3 | */ 4 | 5 | pluginManagerGui: 6 | pluginManager_GUI() 7 | return 8 | 9 | pluginManager_GUI(){ 10 | static wt, ht 11 | static searchTerm, pluginMLV 12 | wt := 650 ;(A_ScreenWidth/2.5) - 14 13 | ht := 400 14 | DidDelete := 0 15 | 16 | Gui, PluginM:New 17 | Gui, Margin, 7, 7 18 | Gui, -MaximizeBox 19 | Gui, Font,, Consolas 20 | Gui, Add, Edit, % "x7 y7 w" wt " vsearchTerm gpluginMSearch", 21 | ;Gui, Font,, Courier New 22 | Gui, Add, ListView, % "xp y+10 h" ht-40 " -LV0X10 vpluginMLV gpluginMLV -Multi w" wt, % TXT._name "|" TXT._tags "|" TXT._author "|hidden" 23 | Gui, PluginM:Default 24 | LV_ModifyCol(1, 4*wt/12) , LV_ModifyCol(2, 5*wt/12-4) , LV_ModifyCol(3, 3*wt/12) , LV_ModifyCol(4, 0) 25 | updatePluginList() 26 | Gui, Font 27 | ; The menu 28 | Menu, plMenu, Add, % TXT._run, plugin_Run 29 | Menu, plMenu, Add 30 | Menu, plMenu, Add, % TXT.plg_edit, plugin_edit 31 | Menu, plMenu, Add, % TXT.plg_properties, plugin_showprops 32 | Menu, plMenu, Add, % TXT.HST_m_del, plugin_delete 33 | Menu, plMenu, Default, % TXT._run 34 | 35 | Gui, Add, StatusBar 36 | Gui, pluginM:Show, % "w" wt+14 " h" ht+30, % PROGNAME " " TXT.PLG__name 37 | ; the Hotkeys 38 | Hotkey, IfWinActive, % PROGNAME " " TXT.PLG__name 39 | hkZ("^f", "pluginSearchfocus") 40 | hkZ("!d", "pluginSearchfocus") 41 | Hotkey, If 42 | Hotkey, If, IsPlugListViewActive() 43 | hkZ("Enter", "plugin_Run") 44 | hkZ("F2", "plugin_edit") 45 | hkZ("!Enter", "plugin_showprops") 46 | hkZ("Del", "plugin_delete") 47 | Hotkey, If 48 | return 49 | 50 | pluginMLV: 51 | if A_GuiEvent = DoubleClick 52 | gosub plugin_Run 53 | return 54 | 55 | pluginSearchfocus: 56 | GuiControl, pluginM:focus, searchTerm 57 | GuiControl, pluginM:focus, Edit1 58 | return 59 | 60 | plugin_Run: 61 | Gui, pluginM:Default 62 | gosub plugin_getSelected 63 | filepath := PLUGINS["<>"][dirNum]["plugin_path"] 64 | SB_SetText(TXT.PLG_sb_running " - " plugin_displayname) 65 | ret := API.runPlugin(filepath) 66 | Gui, pluginM:Default ; set it def again incase gui was changed 67 | if (ret != "") && !(Instr(filepath, "external.") == 1) 68 | guiMsgBox(plugin_displayname " Return", ret, "pluginM") 69 | Gui, pluginM:Default ; for the SB cmd below to work 70 | SB_SetText(TXT.PLG_sb_exit " - " plugin_displayname) 71 | EmptyMem() 72 | return 73 | 74 | plugin_edit: 75 | gosub plugin_getSelected 76 | Run % ini_defEditor " """ "plugins\" PLUGINS["<>"][dirNum]["plugin_path"] """" 77 | return 78 | 79 | plugin_showprops: 80 | gosub plugin_getSelected 81 | tempObj := {} 82 | for key,value in PLUGINS["<>"][dirNum] 83 | if key not in #,`*,silent,previewable 84 | tempObj[key] := value 85 | ObjectEditView( tempObj, Array(tempObj["Name"], "pluginM", TXT._properties, (A_ScreenWidth/2)>700 ? 620 : 500 ) , 1 ) 86 | ;guiMsgbox(plugin_displayname " " TXT._properties, disText, "pluginM") 87 | EmptyMem() 88 | return 89 | 90 | plugin_delete: 91 | gosub plugin_getSelected 92 | MsgBox, 52, Plugin Delete, % TXT.PLG_delmsg "`n" plugin_displayname 93 | IfMsgBox, Yes 94 | { 95 | FileDelete, % plugPath := "plugins\" PLUGINS["<>"][dirNum]["Plugin_path"] 96 | FileRemoveDir, % Substr(plugPath,1,-4) ".lib", 1 ;remove .ahk and put .lib 97 | LV_Delete(valSelected) 98 | Gui, pluginM:Default 99 | SB_SetText(TXT.PLG_sb_deleted " - " plugin_displayname) 100 | DidDelete := 1 101 | } 102 | return 103 | 104 | plugin_getSelected: 105 | Gui, pluginM:Default 106 | if LV_GetNext() = 0 107 | valSelected := selected_row 108 | else valSelected := LV_GetNext() 109 | LV_GetText(dirNum, valSelected, 4) , plugin_displayname := PLUGINS["<>"][dirNum]["name"] 110 | return 111 | 112 | pluginMSearch: 113 | Gui, pluginM:Submit, Nohide 114 | updatePluginList(searchTerm) 115 | return 116 | 117 | pluginMGuiContextMenu: 118 | Gui, pluginM:Default 119 | if (A_GuiControl != "pluginMLV") or (LV_GetNext() = 0) 120 | return 121 | selected_row := LV_GetNext() 122 | Menu, plMenu, Show, %A_Guix%, %A_guiy% 123 | return 124 | 125 | pluginMGuiEscape: 126 | pluginMGuiClose: 127 | GUi, pluginM: Destroy 128 | Menu, plmenu, DeleteAll 129 | if DidDelete { 130 | MsgBox, 52, Warning, % TXT.PLG_restartmsg 131 | IfMsgBox, Yes 132 | gosub reload 133 | } 134 | EmptyMem() 135 | return 136 | 137 | } 138 | 139 | updatePluginList(searchTerm="") { 140 | Gui, PluginM:Default 141 | LV_Delete() 142 | 143 | for k,v in PLUGINS 144 | { 145 | if k in external,pformat,`<`> 146 | continue 147 | if !updatePluginList_validate(searchTerm,v) 148 | continue 149 | LV_Add("", v.name, v.tags, v.author, v["#"]) 150 | } 151 | for k,v in PLUGINS.external 152 | { 153 | if !updatePluginList_validate(searchTerm,v) 154 | continue 155 | LV_Add("", v.name, v.tags, v.author, v["#"]) 156 | } 157 | for k,v in PLUGINS.pformat 158 | { 159 | if !updatePluginList_validate(searchTerm,v) 160 | continue 161 | LV_Add("", v.name, v.tags, v.author, v["#"]) 162 | } 163 | } 164 | 165 | updatePluginList_validate(searchTerm, v){ 166 | return SuperInstr(v.name " " v.tags " " v.author , Trim(searchTerm), 1) 167 | } 168 | 169 | ;//////////////////////////////////////////////////////////////////////////////////////////////////////////// 170 | ;------------------------------------------------------ END OF GUI FUNCTIONS -------------------------------- 171 | 172 | updatePluginIncludes() { 173 | FileDelete, plugins\_registry.ahk 174 | loop, plugins\*.ahk 175 | { 176 | if (A_LoopFileExt != "ahk") ; for .ahk~ bk files 177 | continue 178 | if Instr(A_LoopFileName, "external.") = 1 179 | continue 180 | st .= "#Include *i %A_ScriptDir%\plugins\" A_LoopFileName "`n" 181 | } 182 | FileAppend, % st, plugins\_registry.ahk 183 | } 184 | 185 | migratePlugins(){ 186 | loop, plugins\*.ahk 187 | { 188 | if (InStr(A_LoopFileName, "external.") = 1) or (InStr(A_LoopFileName, "pformat.") = 1) 189 | { 190 | clsname := SubStr(A_LoopFileName, 1, InStr(A_LoopFileName, ".")-1) 191 | FileMove, % "plugins\" A_LoopFileName, % "plugins\" clsname "\" RegExReplace(A_LoopFileName, "i)" clsname "."), 0 192 | if FileExist(lpath := "plugins\" Substr(A_LoopFileName, 1, -3) "lib") 193 | FileMoveDir, % lpath, % "plugins\" clsname "\" RegExReplace( SubStr(A_LoopFileName, 1, -3), "i)" clsname "." ) "lib" 194 | } 195 | } 196 | } 197 | 198 | ;------------------------------------------------------------------------------------------------------------- 199 | ;Loads Plugins into the Obj 200 | ;------------------------------------------------------------------------------------------------------------- 201 | 202 | loadPlugins() { 203 | PLUGINS.pformat := {} , PLUGINS.external := {} , PLUGINS["<>"] := {} ; init 2nd level objects 204 | loop, plugins\*.ahk 205 | { 206 | if (A_LoopFileExt != "ahk") 207 | continue 208 | if A_LoopFileName = _registry.ahk 209 | continue 210 | ; read plugin dets 211 | FileRead, ov, % A_LoopFileFullPath 212 | p:=1 , detobj := {} 213 | while p2:=RegExMatch(ov, "im)^;@Plugin-.*$", o, p) { 214 | ps := Substr(o, Instr(o,"-")+1) , pname := Substr(ps, 1, Instr(ps," ")-1) , ptext := Substr(ps, Instr(ps, " ")+1) 215 | p := p2+Strlen(o) , detobj[pname] .= " " ptext , detobj[pname] := Trim(detobj[pname]) 216 | } 217 | 218 | filename := Substr(A_LoopFileName, 1, -4) , c := 0 219 | loop, parse, filename,`. 220 | name%A_index% := A_LoopField , c++ 221 | detobj["#"] := A_index ; add unique number of <> realtive directory 222 | detobj["name"] := detobj.name ? detobj.name : Substr(A_LoopFileName,1,-4) ; add the Name of plugin 223 | detobj["Plugin_path"] := A_LoopFileName 224 | ; and * stores the path of plugin 225 | if c>1 226 | { 227 | if name1 = external 228 | detobj["*"] := "plugins\external." name2 ".ahk" , PLUGINS["external"][name2] := detobj.Clone() 229 | , PLUGINS["<>"][A_index] := detobj.Clone() 230 | else if name1 = pformat 231 | { 232 | detobj["*"] := "plugin_pformat_" name2 233 | If IsFunc(detobj["*"]) ; If function exists i.e. is included 234 | PLUGINS["pformat"][name2] := detobj.Clone() , PLUGINS["<>"][A_index] := detobj.Clone() 235 | } 236 | } 237 | else { 238 | detobj["*"] := "plugin_" name1 239 | if IsFunc(detobj["*"]) 240 | PLUGINS[name1] := detobj.Clone() , PLUGINS["<>"][A_Index] := detobj.Clone() 241 | } 242 | } 243 | ; -- set def pformat 244 | set_pformat() 245 | } 246 | 247 | ;///////////////////////// MORE LOW END GUI FUNCTIONS /////////////////////////////////////////////////////////////////// 248 | 249 | IsPlugListViewActive(){ 250 | return IsActive("SysListView321", "classnn") && IsActive(PROGNAME " " TXT.PLG__name, "window") && ctrlRef=="" 251 | } 252 | #If IsPlugListViewActive() 253 | #If -------------------------------------------------------------------------------- /lib/searchPasteMode.ahk: -------------------------------------------------------------------------------- 1 | /* 2 | Search in Paste Mode functions and labels file. 3 | introduced in v10.6 4 | */ 5 | 6 | searchPasteMode(x, y, h){ 7 | static searchpm, searchpm_ct 8 | hkZ(pstIdentifier pastemodekey.f, "SPM_dispose") 9 | 10 | Gui, searchpm:New 11 | Gui, searchpm:+LastFound +AlwaysOnTop -Caption +ToolWindow 12 | Gui, Add, Edit, x1 y1 w220 R1 vsearchpm gsearchpm_edit -VScroll, 13 | Gui, Add, Edit, x+5 yp w45 r1 vsearchpm_ct +disabled , ;show like 4/17 14 | Gui, searchpm:show, % "x" x " y" y " w" 220+2+5+45 " h" h+2, Clipjump_SPM 15 | 16 | Hotkey, IfWinActive, Clipjump_SPM ahk_class AutoHotkeyGUI 17 | hkZ(spmkey.enter, "spm_paste", 1) 18 | hkZ(spmkey.home, "spm_cancel", 1) 19 | hkZ(spmkey.up, "spm_nextres", 1) 20 | hkZ(spmkey.down, "spm_prevres", 1) 21 | Hotkey, IfWinActive 22 | 23 | gosub searchpm_edit 24 | return 25 | 26 | searchpm_edit: 27 | Gui, searchpm:submit, nohide 28 | SPM.count := searchpm_search(searchpm) 29 | searchpm_jumptomatch(SPM.CHANNEL, SPM.TEMPSAVE+1, 1, (searchpm="") or (SPM.count=0) ? 1 : 0) 30 | return 31 | 32 | spm_paste: 33 | ctrlref := "pastemode" , SPM.KEEP := 1 , MULTIPASTE := 0 ;multipaste will end as this step terminates the ops 34 | gosub SPM_dispose 35 | return 36 | 37 | searchpmGuiEscape: 38 | spm_cancel: 39 | ctrlref := "cancel" , SPM.KEEP := 1 , MULTIPASTE := 0 40 | gosub SPM_dispose 41 | return 42 | 43 | spm_nextres: 44 | if SPM.count { 45 | correctTEMPSAVE() 46 | ++SEARCHOBJ.pointer 47 | searchpm_jumptomatch(CN.NG, TEMPSAVE, 1) 48 | } 49 | return 50 | 51 | spm_prevres: 52 | if SPM.count { 53 | correctTEMPSAVE() 54 | --SEARCHOBJ.pointer 55 | searchpm_jumptomatch(CN.NG, TEMPSAVE, -1) 56 | } 57 | return 58 | } 59 | 60 | SPM_dispose: 61 | Gui, searchpm:Destroy 62 | SPM.ACTIVE := 0 63 | if SPM.KEEP 64 | { 65 | while ctrlRef != "" 66 | sleep 20 67 | changeChannel(SPM.CHANNEL, 0) , TEMPSAVE := realActive := SPM.TEMPSAVE , SPM.KEEP := 0 ; in paste mode where paste occurs, realactive holds tempsave 68 | } 69 | SPM := {} , SEARCHOBJ := {} 70 | return 71 | 72 | searchpm: 73 | SPM.ACTIVE := 1 74 | Gui, imgprv:Destroy 75 | WinGetPos, pmtip_x, pmtip_y,,, ahk_class tooltips_class32 76 | SPM.X := pmtip_x , SPM.Y := pmtip_y 77 | correctTEMPSAVE() , SPM.TEMPSAVE := TEMPSAVE , SPM.CHANNEL := CN.NG 78 | CN["CURSAVE" CN.N] := CURSAVE , CN["TEMPSAVE" CN.N] := TEMPSAVE ; load all values in CN obj 79 | h := getControlInfo("edit", "some", "h") ; get height of edit box 80 | searchPasteMode(pmtip_x, pmtip_y-h-5, h) ; 5 space betn them 81 | return 82 | 83 | searchpm_search(term){ 84 | SEARCHOBJ := {} , c:=0 85 | loop % CN.Total 86 | { 87 | r := A_index-1 88 | SEARCHOBJ[r] := {} 89 | for k,v in CDS[r] 90 | { 91 | if SuperInstr( getRealCD(v) " " CPS[r][k]["Tags"] , Trim(term, " "), 1) 92 | SEARCHOBJ[r][k] := "|" , c++ 93 | } 94 | } 95 | SEARCHOBJ.pointer := c?1:0 96 | SEARCHOBJ.rescount := c 97 | return c 98 | } 99 | 100 | searchpm_jumptomatch(ich, iclip, f, default=0){ 101 | spm_isfound := searchpm_findmatch(ich, iclip, f, nextch, nextclip) 102 | if ( SEARCHOBJ.pointer > searchobj.rescount ) 103 | SEARCHOBJ.pointer := 1 104 | if ( SEARCHOBJ.pointer<1 ) 105 | SEARCHOBJ.pointer := SEARCHOBJ.rescount 106 | if default 107 | nextch := SPM.CHANNEL , nextclip := SPM.TEMPSAVE 108 | if spm_isfound 109 | { 110 | GuiControl, searchpm:, Edit2, % SEARCHOBj.pointer "/" SEARCHOBJ.rescount 111 | changeChannel(nextch, 0) ; 0 = don't save values 112 | IN_BACK := 0 ; not in back - don't allow TEMPSAVE change 113 | TEMPSAVE := nextclip 114 | gosub paste 115 | return 1 116 | } 117 | else { 118 | GuiControl, searchpm:, Edit2, % "0/0" 119 | changeChannel(nextch, 0) 120 | IN_BACK := 0 , TEMPSAVE := nextclip 121 | gosub paste 122 | return 0 123 | } 124 | } 125 | 126 | searchpm_findmatch(curch, curclip, f:=1, byref nextch="", byref nextclip=""){ 127 | loop % CN.Total+1 128 | { 129 | r := f>0 ? (A_index+curch-1) : (1-A_index+curch) 130 | if (r >= CN.Total) 131 | r := r-CN.Total 132 | if r<0 133 | r := CN.Total+r ; 134 | l := (A_index=CN.Total+1) 135 | 136 | loop % n := SEARCHOBJ[r].maxIndex() 137 | { 138 | if f>0 139 | { 140 | if SEARCHOBJ[r].haskey(t := n-A_index+1) 141 | { 142 | j := 0 , j := (l ? (t>=curclip) : (tcurclip)) + (curch!=r) 152 | if j 153 | nextch := r , nextclip := t , done := 1 154 | } 155 | } 156 | if done 157 | return 1 158 | } 159 | } 160 | } -------------------------------------------------------------------------------- /lib/settingsHelper.ahk: -------------------------------------------------------------------------------- 1 | /** 2 | * This file has functions which help the settings gui and making changes according to settings.ini in general 3 | */ 4 | 5 | 6 | /** 7 | * enable/disable the win for paste mode feature 8 | * @param {bool} flag if 1 then enable, else disable 9 | * @param {bool} write if 1 then also write to settings file 10 | */ 11 | manageWinPasteMode(flag, write=0){ 12 | ; disable old shortcut 13 | hkZ( ( paste_k ? "$" pstIdentifier paste_k : emptyvar ) , "Paste", 0) 14 | ; set the vars 15 | if (flag == 1){ 16 | pstIdentifier := "#" 17 | pstKeyName := "LWin" 18 | } else { 19 | pstIdentifier := "^" 20 | pstKeyName := "Ctrl" 21 | } 22 | ; set the shortcut 23 | hkZ( ( paste_k && CLIPJUMP_STATUS ? "$" pstIdentifier paste_k : emptyvar ) , "Paste") 24 | ; write 25 | if (write == 1){ 26 | ini_write("Advanced", "WinForPasteMode", flag, 0) 27 | } 28 | } -------------------------------------------------------------------------------- /lib/translations.ahk: -------------------------------------------------------------------------------- 1 | ;Translations Function for Clipjump 2 | ;IDEAS 3 | ;Translation files are simple text-files with var=value syntax . Add ; before for comment . Only newline comments 4 | ;returns object 5 | 6 | ;REGIONS 7 | ;TIP , ABT , HST , PRV , SET , CNL , TRY , ACT , IGN , LNG, CHC , API , PLG _ (used for independent names) 8 | 9 | 10 | Translations_load(file="languages\english.txt", default_file="languages\english.txt"){ 11 | obj := {} , f := default_file 12 | 13 | if !FileExist(default_file){ 14 | MsgBox, 16, Warning, % TXT.LNG_error 15 | } 16 | 17 | loop 2 18 | { 19 | loop, read, % f 20 | { 21 | if !( line := Trim(A_LoopReadLine) ) or ( Instr(line, ";") = 1 ) 22 | continue 23 | p := Instr(line, "=") 24 | if p = 1 25 | value := Ltrim( Substr(line, 2) ) , obj[var] .= "`n" value 26 | else 27 | var := Trim( Substr(line, 1, p-1) ) , value := LTrim( Substr(line, p+1) ) 28 | , obj[var] := value 29 | } 30 | p := 0 31 | f := file 32 | } 33 | return obj 34 | } 35 | 36 | Translations_apply(){ 37 | ;applies the loaded translations in vars to all GUIs and needed places 38 | ;channelGUI(1) 39 | trayMenu(1) 40 | init_actionmode() 41 | Translations_fixglobalvars() 42 | } 43 | 44 | Translations_fixglobalvars(){ 45 | global 46 | MSG_TRANSFER_COMPLETE := valueof(TXT.TIP_copied_2) 47 | CopyMessage := !ini_IsMessage ? "" : MSG_TRANSFER_COMPLETE " {" CN.Name "}" 48 | 49 | MSG_CLIPJUMP_EMPTY := TXT.TIP_empty1 "`n`n" valueof(TXT.TIP_empty2_2) "`n`n" TXT.TIP_empty3 ;not `n`n 50 | MSG_ERROR := TXT.TIP_error 51 | MSG_MORE_PREVIEW := TXT.TIP_more 52 | MSG_PASTING := TXT.TIP_pasting 53 | MSG_DELETED := TXT.TIP_deleted 54 | MSG_ALL_DELETED := TXT.TIP_alldeleted 55 | MSG_CANCELLED := TXT.TIP_cancelled 56 | MSG_FIXED := TXT.TIP_fixed 57 | MSG_HISTORY_PREVIEW_IMAGE := TXT.HST_viewimage 58 | MSG_FILE_PATH_COPIED := TXT.TIP_filepath " " PROGNAME 59 | MSG_FOLDER_PATH_COPIED := TXT.TIP_folderpath " " PROGNAME 60 | } 61 | 62 | Translations_loadlist(){ 63 | ;load the lang files in dropdown form 64 | loop, languages\*.txt 65 | r .= Substr(A_LoopFileName, 1, -4) "|" 66 | , r .= ( Substr(A_LoopFileName, 1, -4) == ini_Lang ) ? "|" : "" 67 | GuiControl, 2:, ini_Lang, % "|" r 68 | } -------------------------------------------------------------------------------- /plugins/_registry.ahk: -------------------------------------------------------------------------------- 1 | #Include *i %A_ScriptDir%\plugins\deleteFileFolder.ahk 2 | #Include *i %A_ScriptDir%\plugins\hotPaste.ahk 3 | #Include *i %A_ScriptDir%\plugins\noformatting_paste.ahk 4 | #Include *i %A_ScriptDir%\plugins\pformat.commonformats.ahk 5 | #Include *i %A_ScriptDir%\plugins\pformat.noformatting.ahk 6 | #Include *i %A_ScriptDir%\plugins\pformat.sentencecase.ahk 7 | #Include *i %A_ScriptDir%\plugins\updateClipjumpClipboard.ahk 8 | -------------------------------------------------------------------------------- /plugins/deleteFileFolder.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name Delete [File/Folder] 2 | ;@Plugin-Description Deletes clips that are [File/Folder] type from a channel. 3 | ;@Plugin-Author Avi 4 | ;@Plugin-Version 0.3 5 | ;@Plugin-Tags clip management file folder 6 | 7 | ;@Plugin-param1 The channels whose clips of type "[File/folder]" are to be deleted separated by space. If this param is empty, 8 | ;@Plugin-param1 all channels that exist are taken into account. 9 | ;@Plugin-param1 So if you click OK without any parameter, the whole clipjump database will be cleaned of [File/Folder] data-type clips. 10 | 11 | 12 | plugin_deleteFileFolder(zchannels=""){ 13 | Critical ; As all clip files are disturbed, it is necessary to be non-interruptible 14 | if zchannels= 15 | loop % CN.Total ; Cn.total contains total channels 16 | zchannels .= A_index-1 " " 17 | zchannels := Trim(zchannels, " ") 18 | if zchannels= 19 | return 0 20 | zbkCh := CN.NG ; create backup of current channel 21 | CN["CURSAVE" CN.N] := CURSAVE , CN["TEMPSAVE" CN.N] := TEMPSAVE ; put CURSAVE (stores total clips in a channel) and TEMPSAVE in the object 22 | cleaned := 0 23 | 24 | API.blockMonitoring(1) ; block Clipboard monitoring as Clipboard will be heavily changed during the process 25 | loop, parse, zchannels, %A_Space% 26 | { 27 | if FileExist("cache\clips" (zCfactor := A_LoopField ? A_LoopField : "") ) ;for ch. 0, we have cache\clips 28 | { 29 | API.showTip("Deleting Clips of type [File/Folder] from channel " A_LoopField) ; show tip 30 | changeChannel(A_LoopField) ; change Channel to the one to be examined 31 | zSomething_deleted := 1 32 | 33 | while zSomething_deleted ; clearClip() changes clips locn and so loop over files in the directory becomes invalid. So we start it again. 34 | { 35 | zSomething_deleted := 0 36 | loop, cache\clips%zCfactor%\*.avc 37 | { 38 | ONCLIPBOARD := 0 ; This var is made 1 by the OnClipboardChange: label that responds to system clipboard change. 39 | FileRead, Clipboard, *c %A_LoopFileFullPath% ; read clip file to clipboard 40 | zFormat := getClipboardFormat() ; get its format 41 | if ( zFormat == "[" TXT.TIP_file_folder "]" ) ; if format is file/folder 42 | { 43 | 44 | clearClip( Substr(A_LoopFileName,1,-4) ) ; clear the file/folder clip 45 | zSomething_deleted := 1 46 | cleaned++ 47 | break 48 | } 49 | } 50 | } 51 | 52 | } 53 | } 54 | Critical, Off ; Off Critical so that if ONCLIPBOARDCHANGE: wants, it can update the var ONCLIPBOARD 55 | while !ONCLIPBOARD ; wait for the final ONCLIPBOARD to be 1 56 | { 57 | if A_index>40 ; break if something unexpected happened 58 | break 59 | sleep 5 60 | } 61 | API.showTip("Delete [File/Folder] Plugin Finished`n`nCleaned " cleaned " items", 1700) ; remove the tip after 800 ms 62 | changeChannel(zbkCh) ;change channel back 63 | API.blockMonitoring(0) 64 | } -------------------------------------------------------------------------------- /plugins/external.historyPathClean.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name History file paths cleaner 2 | ;@Plugin-Description Cleans History tool of copied file paths and folder paths. 3 | ;@Plugin-Author Avi 4 | ;@Plugin-version 0.1 5 | ;@Plugin-Tags history cleaning 6 | 7 | historypath := A_ScriptDir "\..\cache\history\" 8 | SetWorkingDir, %historypath% 9 | z := 0 10 | 11 | loop, *.txt 12 | { 13 | Fileread, var, %A_LoopFileName% 14 | match := 1 15 | loop, parse, var, `n, `r 16 | if !RegExMatch(A_LoopField, "i)^[A-Z]:\\[^\*\?\""\|]*$") 17 | match := 0 18 | if match { 19 | FileDelete, % A_LoopFileName 20 | z++ 21 | } 22 | } 23 | 24 | Msgbox, Cleaned %z% Items from the History. -------------------------------------------------------------------------------- /plugins/external.translationFileCleaner.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name Translation File Cleaner 2 | ;@Plugin-Description Finds extra and duplicate keys in translation files and shows them 3 | ;@Plugin-Author Avi 4 | ;@Plugin-version 0.1 5 | ;@Plugin-Tags translation maintenance 6 | 7 | ;@Plugin-param1 The language file name to look in (without the .txt) 8 | #Include %A_ScriptDir%\..\publicAPI.ahk 9 | 10 | 11 | projectDir := A_WorkingDir 12 | 13 | FileRead, fstr, Clipjump.ahk 14 | 15 | loop, lib\*.ahk 16 | { 17 | tmp := "" 18 | FileRead, tmp, % A_LoopFileFullPath 19 | fstr .= "`n" tmp 20 | } 21 | 22 | ; MANAGING ARGUEMENT 23 | F = %1% 24 | if ( F == "" ) ; if no arguement passed 25 | ExitApp 26 | 27 | F := "languages\" F ".txt" 28 | if !FileExist(F){ 29 | Msgbox, Translation file not found. 30 | ExitApp 31 | } 32 | 33 | kobj := {} 34 | 35 | loop, read, % F 36 | { 37 | m := Trim(A_LoopReadLine) 38 | if ((Instr(m,";")==1) || (Instr(m,"=")==1) || !m) 39 | continue 40 | k := Trim(Substr(m, 1, Instr(m,"=")-1)) 41 | if !Instr(fstr, k) 42 | err .= k "`n" 43 | if !kobj.hasKey(k) 44 | kobj[k] := 0 45 | else 46 | dup .= k "`n" 47 | } 48 | 49 | cj := new Clipjump() 50 | str = "INVALIDS`n`n%err%`n`nDUPLICATES`n`n%dup%" 51 | fstr := "guiMsgBox(""Translation File Cleaner Results""," str ")" 52 | cj.runFunction(fstr) -------------------------------------------------------------------------------- /plugins/hotPaste.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name Hotstring-Paste 2 | ;@Plugin-Version 0.26 3 | ;@Plugin-Description Edit the file "plugins\hotPaste.lib\base.ahk" to add hotstrings (like hotkeys) that will paste the desired clip when you write a particular text. 4 | ;@Plugin-Description Run this plugin once from here to have the 'base.ahk' file created. 5 | ;@Plugin-Author AutoHotkey, Avi 6 | ;@Plugin-Tags instant pasting 7 | 8 | #Hotstring EndChars `n `t 9 | 10 | plugin_hotPaste(){ 11 | FileCreateDir, plugins\hotPaste.lib 12 | 13 | test := " 14 | ( 15 | ; writing 'cj_site' followed by a space/Enter/Tab will PASTE the site URL 16 | ::cj_site:: 17 | API.PasteText(""http://clipjump.sourceforge.net"") 18 | return 19 | 20 | ::1stClip:: 21 | API.Paste(0,1) ; write '1stClip' to paste clip 1 of channel 0. 22 | return 23 | 24 | ::3clip:: 25 | API.Paste(CN.NG, 3) ; CN.NG has the current active channel number, this pastes 3rd clip of active channel 26 | return 27 | 28 | ; EDIT THIS FILE TO ADD MORE AND RESTART TO HAVE THEM LOADED 29 | )" 30 | 31 | if !FileExist( zPath := "plugins\hotPaste.lib\base.ahk" ) 32 | FileAppend, % test, % zPath 33 | 34 | MsgBox, 64, Hello, % "Please edit the plugins\hotPaste.lib\base.ahk file to meet your needs. See the documentation of HotPaste in help file for more info." 35 | ; . "A Gui will be added to this plugin in the future versions." 36 | Run % ini_defEditor " """ "plugins\hotPaste.lib\base.ahk""" 37 | } 38 | 39 | 40 | ;///////////////////// PLUGIN STARTS ////////////////////////////////////////// 41 | 42 | IfWinNotActive, a_window_dat_never_exists 43 | { 44 | ;//////////////////// HOTRSTRINGS AREA /////////////////////////////////// 45 | 46 | 47 | #Include *i %A_ScriptDir%\plugins\hotPaste.lib\base.ahk 48 | 49 | 50 | ; //////////////////// END OF HOTSTRINGS AREA ////////////////////////////// 51 | } -------------------------------------------------------------------------------- /plugins/noformatting_paste.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name NoFormatting Paste 2 | ;@Plugin-Description Pastes current clipboard without formatting. Make first parameter 1 to trim all types of whitespace. 3 | ;@Plugin-version 0.2 4 | ;@Plugin-Author Avi 5 | ;@Plugin-Tags no-format paste 6 | ;@Plugin-Silent 1 7 | 8 | /* 9 | To create a System Level shortcut, use with Customizer as- 10 | 11 | [paste_current_noformatting] 12 | bind = Win+v 13 | run = API.runPlugin(noformatting_paste.ahk) 14 | OR 15 | run = API.runPlugin(noformattin_paste.ahk, 1) 16 | 17 | */ 18 | 19 | plugin_noformatting_paste(trimall=0){ 20 | API.blockMonitoring(1) ; blocks Clipboard monitoring by Clipjump 21 | try Clipboard := trimall ? Trim(Clipboard, "`r`n `t") : Rtrim(Clipboard, "`r`n") ; Trims clipboard of any formatting 22 | API.blockMonitoring(0) ; enable monitoring now 23 | Send ^{vk56} ; i.e. ^v 24 | } -------------------------------------------------------------------------------- /plugins/pformat.commonformats.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name Common Formats 2 | ;@Plugin-Description Shows a gui to paste with a format from many types of predefined formats. Can be easily extended to include more formats. 3 | ;@Plugin-Description For that edit the pformat.commonformats.lib/user.ahk file. This file if needed is created when you run this plugin for the first time. 4 | ;@Plugin-Description Only works for Text ([Text] or [File/Folder]) type data. 5 | ;@Plugin-Author Avi 6 | ;@Plugin-Tags pformat 7 | ;@Plugin-version 0.61 8 | ;@Plugin-Previewable 0 9 | 10 | ;@Plugin-Param1 The Input Text 11 | 12 | ;------------------------------------------------------------- Paste Formats ------------------------------------ 13 | 14 | ; ###### ADD USER paste formats in user.ahk file ##### 15 | #Include *i %A_ScriptDir%\plugins\pformat.commonformats.lib\user.ahk 16 | ; #################################################### 17 | 18 | 19 | plugin_pformat_commonformats_None(zin){ 20 | STORE["commonformats_None"] := "This returns the original clip rejecting any change made to the clip." 21 | return zin , STORE.ClipboardChanged := 0 22 | } 23 | 24 | plugin_pformat_commonformats_HTMLList(zin){ 25 | return RegExReplace( Trim(zin, "`r`n "), "m`a)^", "
  • ") , STORE.ClipboardChanged := 1 26 | } 27 | 28 | plugin_pformat_commonformats_BBCodeList(zin){ 29 | return RegExReplace( Trim(zin, "`r`n "), "m`a)^", "[*]") , STORE.ClipboardChanged := 1 30 | } 31 | 32 | plugin_pformat_commonformats_TrimFormatting(zin){ 33 | return RTrim(zin, "`r`n") , STORE.ClipboardChanged := 1 34 | } 35 | 36 | plugin_pformat_commonformats_NumberedList(zin){ 37 | zin := Trim(zin, "`r`n ") 38 | loop, parse, zin, `n, `r 39 | zout .= A_index ". " A_LoopField "`r`n" 40 | return zout , STORE.ClipboardChanged := 1 41 | } 42 | 43 | plugin_pformat_commonformats_lowercase(zin){ 44 | StringLower, zout, zin 45 | return zout , STORE.ClipboardChanged := 1 46 | } 47 | 48 | plugin_pformat_commonformats_TrimWhiteSpace(zin){ 49 | STORE["commonformats_TrimWhiteSpace"] := "Trims white space from the beginning and end of string" 50 | return Trim(zin, "`r`n `t") , STORE.ClipboardChanged := 1 51 | } 52 | 53 | plugin_pformat_commonformats_DeHTML(zin){ 54 | STORE["commonformats_DeHTML"] := "Deactivates HTML code. All ("" & < >) are translated to (" & < >) and linefeed \n to
    ." 55 | Transform, o, HTML, % zin 56 | return plugin_pformat_commonformats_TrimWhiteSpace(o) 57 | } 58 | 59 | plugin_pformat_commonformats_UPPERCASE(zin){ 60 | StringUpper, zout, zin 61 | return zout , STORE.ClipboardChanged := 1 62 | } 63 | 64 | #Include *i %A_ScriptDir%\plugins\pformat.commonformats.lib\unhtml.ahk 65 | plugin_pformat_commonformats_UnHTML(zin){ 66 | STORE["commonformats_unhtml"] := "Converts HTML code to Plain Text. Removes tags from HTML code and converts unicode sequences to characters." 67 | StringReplace, zin, zin, % "
    ", % "`n", All 68 | return Trim(unhtml(zin), "`n`r`t ") , STORE.ClipboardChanged := 1 69 | } 70 | 71 | plugin_pformat_commonformats_RegexReplace(zin, zps){ 72 | STORE["commonformats_RegexReplace"] := "Write Search Needle in first line and replacement string in second line in Input Field. The Replace is based on Autohotkey's" 73 | . " RegexReplace(). Learn more at http://www.autohotkey.com/docs/commands/RegExReplace.htm" 74 | 75 | loop, parse, zps, `n, `r 76 | zps%A_index% := A_LoopField 77 | try 78 | zout := RegExReplace(zin, zps1, zps2) 79 | catch 80 | zout := zin 81 | return zout , STORE.ClipboardChanged := 1 82 | } 83 | 84 | 85 | ;--------------------------------- The Plugin File Starts , end of Paste Formats --------------------------------- 86 | ;----------------------------------------------------------------------------------------------------------------- 87 | 88 | 89 | plugin_pformat_commonformats(zin){ 90 | static zchosenformat, zedit, zinputfield, zinfo 91 | zDone := zOut := "" 92 | 93 | Gui, commonformat:New 94 | Gui, +AlwaysOnTop +ToolWindow -MaximizeBox 95 | 96 | Gui, Add, ListBox, x5 y5 r15 w140 vzchosenformat gzchosenformat section, % plugin_pformat_commonformats_listfunc(A_ScriptDir "\plugins\pformat.commonformats.ahk") 97 | . ( (ztemp := plugin_pformat_commonformats_listfunc(ztF := A_ScriptDir "\plugins\pformat.commonformats.lib\user.ahk")) ? "|" ztemp : "" ) 98 | 99 | Gui, Add, Edit, x+10 w500 h200 vzedit +multi, % zin 100 | 101 | Gui, Add, GroupBox, xs y+5 h70 w650, Info 102 | Gui, Add, Edit, xp+5 yp+15 w640 h50 +ReadOnly -Border vzinfo, 103 | 104 | Gui, Add, Button, xs y+40 +Default, OK 105 | Gui, Add, Button, x+30 yp gplugin_pformat_commonformats_apply, % TXT.SET_apply 106 | Gui, Add, Text, x+55 yp-15, Input Field 107 | Gui, Font, s10, Lucida Console 108 | Gui, Font, s10, Consolas 109 | Gui, Add, Edit, x+10 yp-2 w441 h40 gzinputfield vzinputfield, 110 | Gui, Font 111 | Gui, commonformat:Show,, % "Choose Format" 112 | 113 | if !FileExist(ztF) 114 | { 115 | FileCreateDir, % Substr(ztF, 1, Instr(ztF, "\", 0, 0)-1) 116 | FileAppend, % "; Add User paste formats here`n; Prefix - plugin_pformat_commonformats_", % ztF 117 | } 118 | 119 | GuiControl, ChooseString, zchosenformat, % zchosenformat="" ? "None" : zchosenformat ; choose the previous active format 120 | gosub zchosenformat 121 | zDone := 0 ; used as an identifier in zchosenformat 122 | while !zDone 123 | sleep 200 124 | gosub plugin_pformat_commonformats_end 125 | return zOut 126 | 127 | commonformatbuttonOK: 128 | ;plugin_pformat_commonformats_dopaste: 129 | Gui, commonformat:Submit, nohide 130 | STORE.ClipboardChanged := 1 , zOut := zedit 131 | If (zchosenformat="None") or (zchosenformat="") 132 | zOut := zin, STORE.ClipboardChanged := 0 133 | zDone := 1 134 | return 135 | 136 | commonformatGuiEscape: 137 | commonformatGuiClose: 138 | zDone := 1 139 | STORE.ClipboardChanged := 1 140 | zOut := "" ; cancel paste if user escapes or closes the window 141 | return 142 | 143 | plugin_pformat_commonformats_apply: 144 | Gui, commonformat:Submit, nohide 145 | zin := zEdit 146 | return 147 | 148 | plugin_pformat_commonformats_end: 149 | Gui, commonformat:Destroy ; The original clip will be pasted if you close the gui 150 | WinWaitClose, Choose Format 151 | return 152 | 153 | zinputfield: 154 | Gui, commonformat:Submit, nohide 155 | zoutput := ( zFobj.MaxParams > 1 ) ? zFobj.(zin, zinputfield) : zFobj.(zin) 156 | STORE.ClipboardChanged := 0 ; remove any clipboard change 157 | GuiControl, commonformat:, Edit1, % zoutput 158 | GuiControl, commonformat:, Edit2, % STORE["commonformats_" zchosenformat] 159 | return 160 | 161 | zchosenformat: 162 | GuiControl, commonformat:, Edit3, % "" 163 | Gui, commonformat:Submit, nohide 164 | if (A_GuiEvent="DoubleClick") && (zDone!="") 165 | gosub commonformatbuttonOK 166 | else { 167 | if zchosenformat= 168 | zchosenformat := "None" 169 | zFobj := Func("plugin_pformat_commonformats_" zchosenformat) 170 | if ( zFobj.MaxParams < 2 ) 171 | GuiControl, commonformat:Disable, Edit3 172 | else { 173 | GuiControl, commonformat:Enable, Edit3 174 | GuiControl, commonformat:Focus, Edit3 175 | } 176 | gosub zinputfield 177 | } 178 | return 179 | 180 | } 181 | 182 | ;---------------------------------- Functions used by this plugin ------------------- 183 | 184 | plugin_pformat_commonformats_listfunc(file){ 185 | fileread, z, % file 186 | StringReplace, z, z, `r, , All ; important 187 | z := RegExReplace(z, "mU)""[^`n]*""", "") ; strings 188 | z := RegExReplace(z, "iU)/\*.*\*/", "") ; block comments 189 | z := RegExReplace(z, "m);[^`n]*", "") ; single line comments 190 | p:=1 , z := "`n" z 191 | while q:=RegExMatch(z, "iU)`n[^ `t`n,;``\(\):=\?]+\([^`n]*\)[ `t`n]*{", o, p) 192 | { 193 | if IsFunc( zfk := Substr( RegExReplace(o, "\(.*", ""), 2) ) 194 | If zfk not in plugin_pformat_commonformats_listfunc,plugin_pformat_commonformats 195 | lst .= "`n" RegExReplace(zfk, "^(plugin_pformat_commonformats_)", "", "", 1) 196 | p := q+Strlen(o)-1 197 | } 198 | Sort, lst 199 | return Trim( RegExReplace(lst, "`n", "|"),"|" ) 200 | } 201 | 202 | -------------------------------------------------------------------------------- /plugins/pformat.commonformats.lib/unhtml.ahk: -------------------------------------------------------------------------------- 1 | ; unhtml.ahk - stdlib desired name 2 | ; 3 | ; StdLib compliant collection to convert HTML to Text 4 | ; 5 | ; Known Bugs: unHTML_StripEntities wont work for 6 | ; Unicode / UTF-8 Entities - These will stay intact 7 | ; 8 | ; v 1.3 / (a & w) Nov 2008 by derRaphael(at)oleco.net 9 | ; 10 | 11 | ; Syntax sugar for combined call of StripEntities & StripTags 12 | unHTML(html){ 13 | Return unHTML_StripTags(unHTML_StripEntities(html)) 14 | } 15 | 16 | ; Removes HTML Tags frolm given text 17 | unHTML_StripTags(txt){ ; v1 (w) by derRaphael Oct 2008 18 | Return RegExReplace(txt,"<[^>]+>","") 19 | } 20 | 21 | ; Strips HTML entities out of given Text / No Unicode / UTF8 Entity support yet 22 | unHTML_StripEntities(html){ ; v1.3.1 (w) by derRaphael Nov 2008 23 | Loop, 24 | if (RegExMatch(html,"&[a-zA-Z0-9#]+;",entity)) { 25 | n:=RegExReplace(unHTML_ConvertEntity2Number(entity),"[^\d]") 26 | if ((n>0) && (n<256)) { 27 | html := RegExReplace(html,"\Q" entity "\E",chr(n)) 28 | } 29 | } else 30 | break 31 | return html 32 | } 33 | 34 | ; Thx Jamey: http://www.autohotkey.com/forum/viewtopic.php?t=22522 35 | ; Rewrite by derRaphael v 1.3 / Nov 2008 36 | unHTML_ConvertEntity2Number(sEntityName) { 37 | nNumber := -1 ;This will remain -1 if the entity name could not be translated. 38 | nStr := StrLen(sEntityName) 39 | 40 | ;Require the input format: "& ... ;" 41 | if ((nStr < 3) || (SubStr(sEntityName, 1, 1) != "&") || (SubStr(sEntityName, 0) != ";")) 42 | return %nNumber% 43 | 44 | ;If the entity was given as its entity-number format, then return the number part. 45 | sEntityIdentifier := SubStr(sEntityName, 2, nStr-2) 46 | 47 | if sEntityIdentifier is integer 48 | { 49 | sEntityIdentifier := Round(sEntityIdentifier) ;Not just can be interpreted as integer, but is! 50 | if (sEntityIdentifier >= 0) 51 | return %sEntityIdentifier% 52 | else 53 | return %nNumber% 54 | } 55 | 56 | ;If sEntityName really is a name-format entity, then find its number from the table below. 57 | entityList := "quot|34,apos|39,amp|38,lt|60,gt|62,nbsp|160,iexcl|161,cent|162,pound|163,curren|164," 58 | . "yen|165,brvbar|166,sect|167,uml|168,copy|169,ordf|170,laquo|171,not|172,shy|173,reg|" 59 | . "174,macr|175,deg|176,plusmn|177,sup2|178,sup3|179,acute|180,micro|181,para|182,middo" 60 | . "t|183,cedil|184,sup1|185,ordm|186,raquo|187,frac14|188,frac12|189,frac34|190,iquest|" 61 | . "191,Agrave|192,Aacute|193,Acirc|194,Atilde|195,Auml|196,Aring|197,AElig|198,Ccedil|1" 62 | . "99,Egrave|200,Eacute|201,Ecirc|202,Euml|203,Igrave|204,Iacute|205,Icirc|206,Iuml|207" 63 | . ",ETH|208,Ntilde|209,Ograve|210,Oacute|211,Ocirc|212,Otilde|213,Ouml|214,times|215,Os" 64 | . "lash|216,Ugrave|217,Uacute|218,Ucirc|219,Uuml|220,Yacute|221,THORN|222,szlig|223,agr" 65 | . "ave|224,aacute|225,acirc|226,atilde|227,auml|228,aring|229,aelig|230,ccedil|231,egra" 66 | . "ve|232,eacute|233,ecirc|234,euml|235,igrave|236,iacute|237,icirc|238,iuml|239,eth|24" 67 | . "0,ntilde|241,ograve|242,oacute|243,ocirc|244,otilde|245,ouml|246,divide|247,oslash|2" 68 | . "48,ugrave|249,uacute|250,ucirc|251,uuml|252,yacute|253,thorn|254,yuml|255,OElig|338," 69 | . "oelig|339,Scaron|352,scaron|353,Yuml|376,circ|710,tilde|732,ensp|8194,emsp|8195,thin" 70 | . "sp|8201,zwnj|8204,zwj|8205,lrm|8206,rlm|8207,ndash|8211,mdash|8212,lsquo|8216,rsquo|" 71 | . "8217,sbquo|8218,ldquo|8220,rdquo|8221,bdquo|8222,dagger|8224,Dagger|8225,hellip|8230" 72 | . ",permil|8240,lsaquo|8249,rsaquo|8250,euro|8364,trade|8482" 73 | 74 | Loop,Parse,entityList,`, 75 | if (RegExMatch(A_LoopField,"i)^" sEntityIdentifier "\|(?P\d+)", n)) 76 | break 77 | 78 | return (nNumber!="") ? nNumber : sEntityIdentifier 79 | } -------------------------------------------------------------------------------- /plugins/pformat.noformatting.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name Trim Formatting 2 | ;@Plugin-Description Strip off Formatting 3 | ;@Plugin-Author Avi 4 | ;@Plugin-Tags pformat 5 | 6 | ;@Plugin-Previewable 0 7 | ; Why previewable 0 ? because the text shown in tooltip is only bare text, without formatting... So this function doesn't change anything and thus 8 | ; is a waste of time running it. 9 | 10 | ;@Plugin-param1 Text to remove format off 11 | 12 | plugin_pformat_noformatting(zin){ 13 | zCS := getClipboardFormat() 14 | if (zCS== "[" TXT.TIP_text "]") 15 | { 16 | try z := Rtrim(zin, "`r`n") 17 | CALLER := 0 , STORE.ClipboardChanged := 1 ; make it 0 again to avoid any interference with apps like Excel 18 | return z 19 | } 20 | else return zin 21 | } -------------------------------------------------------------------------------- /plugins/pformat.sentencecase.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name SentenceCase 2 | ;@Plugin-Description Paste Text in Sentence Case 3 | ;@Plugin-Author Avi 4 | ;@Plugin-Tags pformat 5 | ;@Plugin-version 0.0.1 6 | ;@Plugin-Previewable 1 7 | 8 | ;@Plugin-param1 Text to convert in Sentence case 9 | 10 | plugin_pformat_sentencecase(zin){ 11 | zCS := getClipboardFormat() 12 | if (zCS== "[" TXT.TIP_text "]") 13 | { 14 | zin_copy := zin , STORE.ClipboardChanged := 1 15 | loop, parse, zin, `.?!`n`r 16 | { 17 | zChanged := plugin_pformat_sentencecase_upper(A_LoopField) 18 | StringReplace, zin_copy, zin_copy, % A_LoopField, % zChanged 19 | } 20 | return zin_copy 21 | } 22 | else return zin 23 | } 24 | 25 | plugin_pformat_sentencecase_upper(zin){ 26 | zStart := RegExMatch(zin, "iU)[a-z]", zFout) 27 | StringUpper, zFout, zFout 28 | zFst := Substr(zin, 1, (zStart?zStart:1)-1) 29 | zAll := Substr( zin, (zStart?zStart:1)+Strlen(zFout) ) 30 | StringLower, zAll, zAll 31 | return zFst zFout zAll 32 | } -------------------------------------------------------------------------------- /plugins/updateClipjumpClipboard.ahk: -------------------------------------------------------------------------------- 1 | ;@Plugin-Name Sync Clipjump Clipboard 2 | ;@Plugin-Silent 1 3 | ;@Plugin-Description Updates/Syncs clipjump clipboards with the current active system clipboard 4 | ;@Plugin-Author Avi 5 | ;@Plugin-Version 0.1 6 | ;@Plugin-Tags system clipboard clipjump 7 | 8 | ;@Plugin-param1 Pass 1 or True to show confirmation message after updating 9 | 10 | plugin_updateClipjumpClipboard(zMsg = 1){ 11 | try 12 | zcb := ClipboardAll 13 | catch 14 | error := 1 15 | try 16 | Clipboard := zcb 17 | catch 18 | error := 1 19 | sleep 500 20 | if zMsg 21 | if !error 22 | API.showTip( "Both Clipboards were synced. Success !", 1200) 23 | else API.showTip("Operation Failed ! There was an error", 1200) 24 | } -------------------------------------------------------------------------------- /publicAPI.ahk: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This function file helps any AHK script to use Clipjump API functions from its side. 4 | Just include this file in your script. 5 | 6 | Note that API.text2binary() is not supported currently. 7 | The ClipjumpCommunicator.ahk file is already included in this file. 8 | 9 | v 15.5.17 10 | 11 | */ 12 | 13 | /* 14 | EXAMPLES 15 | (It is necessary to initialize the object with "new") 16 | 17 | cj := new Clipjump() 18 | 19 | cj.IncognitoMode(1) 20 | cj.pasteText("some text") 21 | msgbox % cj.getClipLoc(1, 5) 22 | cj.Paste("","") 23 | cj["CALLER"] := 0 24 | cj["STORE.somevar"] := "abc value" 25 | msgbox % cj.getVar("version") 26 | msgbox % cj.version 27 | 28 | */ 29 | 30 | ;cj := new Clipjump() 31 | ;cj.runFunction("set_pformat(NO-FORMATTING)") 32 | ;cj.getClipAt(0, 7) 33 | ;msgbox % cj.author_page 34 | 35 | class Clipjump 36 | { 37 | 38 | __New(){ 39 | } 40 | 41 | __Call(funcname, parameters*){ 42 | cbF := A_temp "\cjcb.txt" 43 | rFuncs := "|getClipAt|getClipLoc|getVar|runFunction|" 44 | 45 | resChar := "`r" 46 | ps := "" 47 | for key,val in parameters 48 | { 49 | StringReplace, val, val, % "`r`n", % "`n", All 50 | StringReplace, val, val, % "`r", % "`n", All 51 | ps .= resChar val 52 | } 53 | FileDelete, % cbF 54 | returned := CjControl("API:" funcName ps) 55 | if (returned>0) && Instr(rFuncs, "|" funcName "|") 56 | { 57 | Clipjump_wait4file() 58 | Fileread, out, % cbF 59 | FileDelete, % cbF 60 | return out 61 | } 62 | else return "" 63 | } 64 | 65 | /* 66 | Use - 67 | cj := new Clipjump() 68 | msgbox % cj.version 69 | */ 70 | __Get(var){ 71 | return this.getVar(var) 72 | } 73 | 74 | /* 75 | Use - 76 | cj := new Clipjump() 77 | cj["pastemodekey.z"] := "y" 78 | cj.MYVAR := "value" 79 | */ 80 | __Set(var, value){ 81 | this.setVar(var, value) 82 | } 83 | 84 | ;----------------------------------------------------------------------------------------- 85 | ;------------------------------------------- END ----------------------------------------- 86 | ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 87 | } 88 | 89 | Clipjump_wait4file(){ 90 | while !FileExist(A_temp "\cjcb.txt") 91 | sleep 15 92 | } 93 | 94 | 95 | ;---------------------- Clipjump Communicator.ahk --------------------------------------------- 96 | 97 | CjControl(ByRef Code) 98 | { 99 | global 100 | local IsExe, TargetScriptTitle, CopyDataStruct, Prev_DetectHiddenWindows, Prev_TitleMatchMode, Z, S 101 | 102 | if ! (IsExe := CjControl_check()) 103 | return -1 ;Clipjump doesn't exist 104 | 105 | TargetScriptTitle := "Clipjump" (IsExe==1 ? ".ahk ahk_class AutoHotkey" : ".exe ahk_class AutoHotkey") 106 | 107 | VarSetCapacity(CopyDataStruct, 3*A_PtrSize, 0) 108 | SizeInBytes := (StrLen(Code) + 1) * (A_IsUnicode ? 2 : 1) 109 | NumPut(SizeInBytes, CopyDataStruct, A_PtrSize) 110 | NumPut(&Code, CopyDataStruct, 2*A_PtrSize) 111 | Prev_DetectHiddenWindows := A_DetectHiddenWindows 112 | Prev_TitleMatchMode := A_TitleMatchMode 113 | DetectHiddenWindows On 114 | SetTitleMatchMode 2 115 | Z := 0 116 | 117 | while !Z 118 | { 119 | SendMessage, 0x4a, 0, &CopyDataStruct,, %TargetScriptTitle% 120 | Z := ErrorLevel 121 | if (Z == "FAIL") 122 | Z := "" 123 | if A_index>100 124 | return -1 ;Timeout.. 125 | } 126 | 127 | DetectHiddenWindows %Prev_DetectHiddenWindows% 128 | SetTitleMatchMode %Prev_TitleMatchMode% 129 | 130 | while !FileExist(A_temp "\clipjumpcom.txt") 131 | { 132 | if (A_index>40) ;2 secs total 133 | if !CjControl_check() 134 | return -1 135 | sleep 50 136 | ;Tooltip, % "waiting for clipjumpcom" 137 | } 138 | FileDelete % A_temp "\clipjumpcom.txt" 139 | ;ToolTip 140 | 141 | return 1 ;True 142 | } 143 | 144 | CjControl_check(){ 145 | 146 | HW := A_DetectHiddenWindows , TM := A_TitleMatchMode 147 | DetectHiddenWindows, On 148 | SetTitleMatchMode, 2 149 | A := WinExist("\Clipjump.ahk - ahk_class AutoHotkey") 150 | E := WinExist("\Clipjump.exe - ahk_class AutoHotkey") 151 | DetectHiddenWindows,% HW 152 | SetTitleMatchMode,% TM 153 | 154 | return A ? 1 : (E ? 2 : 0) 155 | } -------------------------------------------------------------------------------- /sqlite3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/sqlite3.dll -------------------------------------------------------------------------------- /website/Cj.hhp: -------------------------------------------------------------------------------- 1 | [OPTIONS] 2 | Binary TOC=No 3 | Binary Index=Yes 4 | Compiled File=Clipjump.chm 5 | Contents File=Contents.hhc 6 | Index File=Index.hhk 7 | Default Window= 8 | Default Topic=index.html 9 | Default Font= 10 | Full-text search=Yes 11 | Auto Index=Yes 12 | Language= 13 | Title=Clipjump Help 14 | Create CHI file=No 15 | Compatibility=1.1 or later 16 | Error log file= 17 | Full text search stop list file= 18 | Display compile progress=Yes 19 | Display compile notes=Yes 20 | 21 | [FILES] 22 | assets\base.css 23 | changelog.html 24 | index.html 25 | contact.html 26 | docs\basic_help.html 27 | docs\custom.html 28 | docs\faq.html 29 | docs\history.html 30 | docs\ini.html 31 | docs\organizer.html 32 | docs\settings.html 33 | docs\translate.html 34 | docs\troubleshooting.html 35 | docs\channels.html 36 | docs\devList.html 37 | docs\shortcuts.html 38 | docs\examples\ClipjumpCustom.ini 39 | images\cancel.png 40 | images\COPY.png 41 | images\copyclip.png 42 | images\delete.png 43 | images\fixate.png 44 | images\pasting.png 45 | images\path.png 46 | images\pformat.png 47 | images\trayicon.png 48 | 49 | -------------------------------------------------------------------------------- /website/Index.hhk: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
      11 |
    • 12 | 13 | 14 | 15 |
    • 16 | 17 | 18 | 19 |
    • 20 | 21 | 22 | 23 |
        24 |
      • 25 | 26 | 27 | 28 |
      • 29 | 30 | 31 | 32 |
      • 33 | 34 | 35 | 36 |
      • 37 | 38 | 39 | 40 |
      41 |
    • 42 | 43 | 44 | 45 |
    • 46 | 47 | 48 | 49 |
    • 50 | 51 | 52 | 53 |
    • 54 | 55 | 56 | 57 |
    • 58 | 59 | 60 | 61 |
    • 62 | 63 | 64 | 65 |
    • 66 | 67 | 68 | 69 |
    • 70 | 71 | 72 | 73 |
    • 74 | 75 | 76 | 77 |
    • 78 | 79 | 80 | 81 |
        82 |
      • 83 | 84 | 85 | 86 |
      • 87 | 88 | 89 | 90 |
      • 91 | 92 | 93 | 94 |
      • 95 | 96 | 97 | 98 |
      • 99 | 100 | 101 | 102 |
      103 |
    • 104 | 105 | 106 | 107 |
    • 108 | 109 | 110 | 111 |
    • 112 | 113 | 114 | 115 |
    • 116 | 117 | 118 | 119 |
    • 120 | 121 | 122 | 123 |
    • 124 | 125 | 126 | 127 |
    • 128 | 129 | 130 | 131 |
    • 132 | 133 | 134 | 135 |
    • 136 | 137 | 138 | 139 |
    • 140 | 141 | 142 | 143 |
    • 144 | 145 | 146 | 147 |
    • 148 | 149 | 150 | 151 |
    • 152 | 153 | 154 | 155 |
        156 |
      • 157 | 158 | 159 | 160 |
      • 161 | 162 | 163 | 164 |
      • 165 | 166 | 167 | 168 |
      • 169 | 170 | 171 | 172 |
      • 173 | 174 | 175 | 176 |
      • 177 | 178 | 179 | 180 |
      181 |
    • 182 | 183 | 184 | 185 |
    • 186 | 187 | 188 | 189 |
    • 190 | 191 | 192 | 193 |
    • 194 | 195 | 196 | 197 |
    • 198 | 199 | 200 | 201 |
    • 202 | 203 | 204 | 205 |
    • 206 | 207 | 208 | 209 |
    • 210 | 211 | 212 | 213 |
    • 214 | 215 | 216 | 217 |
    • 218 | 219 | 220 | 221 |
    • 222 | 223 | 224 | 225 |
    • 226 | 227 | 228 | 229 |
    • 230 | 231 | 232 | 233 |
    • 234 | 235 | 236 | 237 |
    • 238 | 239 | 240 | 241 |
    • 242 | 243 | 244 | 245 |
    246 | 247 | -------------------------------------------------------------------------------- /website/_config.yml: -------------------------------------------------------------------------------- 1 | name: Clipjump 2 | markdown: redcarpet 3 | fullpath: http://clipjump.sourceforge.net 4 | description: Official homepage of Clipjump Clipboard Manager 5 | baseurl: / 6 | permalink: /blog/:categories/:title.html 7 | title: Clipjump 8 | highlighter: rouge 9 | 10 | # More 11 | author: 12 | fullname: Avi Aryan 13 | twitter: aviaryan123 14 | github: aviaryan 15 | facebook: avi.aryan.ap 16 | google: AviAryan 17 | gplusid: 110328513842183229282 18 | 19 | googleverify: QF1dxap5pOK1UzZAuCzgvJDuDA5AvYrH9ch5aWr5h-8 20 | exclude: ['README.md', 'Gemfile.lock', 'Gemfile', 'Rakefile'] 21 | version: 12.5 -------------------------------------------------------------------------------- /website/_includes/disqus.html: -------------------------------------------------------------------------------- 1 |

    2 | 3 | 4 | 5 |
    6 |
    7 | 21 | 22 |
    -------------------------------------------------------------------------------- /website/_includes/installing_custom.html: -------------------------------------------------------------------------------- 1 | 2 |

    Installing a Customization

    3 | Installing a customization is easy.
    4 | Just copy the code to ClipjumpCustom.ini in the Clipjump.exe folder and restart Clipjump.
    5 | The Customization will take effect and the 'bind' shortcut if any for that customization will become active.
    6 |
    7 | Learn about Clipjump Custom
    8 | -------------------------------------------------------------------------------- /website/_layouts/customs.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | rtype: docs 4 | --- 5 | 6 | {{ content }} 7 | {% assign page.rtype = "docs" %} 8 |



    9 | {% include installing_custom.html %} -------------------------------------------------------------------------------- /website/_layouts/default.html: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | Clipjump · {{ page.title }} 22 | 23 | 24 | {% if page.homepage == 1 %} 25 | 26 | {% endif %} 27 | 28 | {% if page.rtype == "docs" %} 29 | 35 | {% endif %} 36 | 37 | 38 | 39 | 40 | 41 | {% if page.rtype != "docs" %} 42 |
    43 |
    44 | 52 |
    53 | {% else %} 54 |

    55 | {% endif %} 56 | 57 |
    58 | {% if page.homepage != 1 %} 59 |

    {{ page.title }}


    60 | {% endif %} 61 |
    62 | {{ content }} 63 | 64 | {% if page.rtype != "docs" %} 65 | {% include disqus.html %} 66 | {% endif %} 67 | {% if page.rtype != "docs" %} 68 | 69 | {% endif %} 70 |
    71 |
    72 | 73 | {% if page.rtype != "docs" %} 74 |

    75 | 107 | {% endif %} 108 | 109 | 110 | -------------------------------------------------------------------------------- /website/_layouts/docs.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | rtype: docs 4 | --- 5 | {{ content }} 6 |

    7 | 8 |
    9 |
    10 | Translate 11 |

    -------------------------------------------------------------------------------- /website/assets/base.css: -------------------------------------------------------------------------------- 1 | /* styles tweaked from the original AutoHotkey css */ 2 | 3 | body { 4 | font-family: Verdana, Arial, Helvetica, sans-serif, "MS sans serif"; 5 | font-size: 14px; 6 | border: 0; 7 | margin-top: 0px; 8 | margin-left: 0px; 9 | margin-right: 0px; 10 | background-color: #FFFFFF; 11 | line-height: 145%; 12 | } 13 | 14 | header { 15 | padding: 10px 10px 10px 20px; 16 | background-color: #eeeeee; 17 | margin-bottom: 50px; 18 | } 19 | header .banner { 20 | color: #333333; 21 | margin-top: 30px; 22 | margin-bottom: 20px; 23 | font-size: 40px; 24 | } 25 | 26 | header .menubar { 27 | font-family: Consolas; 28 | font-size: 18px; 29 | } 30 | 31 | div#content, header .banner, header .menubar { 32 | max-width: 1050px; 33 | margin-left: auto; 34 | margin-right: auto; 35 | } 36 | 37 | div#realcontent { 38 | margin-left: 10px; 39 | margin-right: 10px; 40 | } 41 | 42 | footer { 43 | margin-left: 0px; 44 | margin-right: 0px; 45 | bottom: 0px; 46 | height: 25em; 47 | background-color: #cccccc; 48 | } 49 | 50 | div#fcontent { 51 | margin-left: auto; margin-right: auto; 52 | font-size: 16px; 53 | max-width: 1050px; 54 | } 55 | 56 | p { 57 | margin-top: 0.7em; 58 | margin-bottom: 0.7em; 59 | } 60 | 61 | h1 { 62 | font-size: 22px; 63 | font-weight: normal; 64 | margin: 0; 65 | padding: 0 0 0.5em 4px; 66 | border-bottom-style: ridge; 67 | border-bottom-color: #FFFFFF; 68 | border-bottom-width: 2px; 69 | } 70 | h2 { 71 | font-size: 18px; 72 | font-weight: bold; 73 | font-family: Arial, Helvetica, sans-serif, "MS sans serif"; 74 | background-color: #405871; 75 | color: #FFFFFF; 76 | margin: 1.5em 0 0.5em 0; 77 | padding: 0.1em 0 0.1em 0.2em; 78 | } 79 | h3 { 80 | font-size: 14px; 81 | font-weight: normal; 82 | color: #000000; 83 | background-color: #E6E6E6; 84 | margin: 1.0em 0 0.5em 0; 85 | padding: 0.3em 0.3em 0.3em 0.3em; 86 | border: 1px solid silver; 87 | border-bottom: 1px solid silver; 88 | } 89 | h4 { 90 | font-size: 14px; 91 | margin: 0.7em 0; 92 | border-bottom: 1px solid lightgrey; 93 | } 94 | 95 | ul, ol {margin-top: 0.7em; margin-bottom: 0.7em;} 96 | li {margin-top: 0.2em; margin-bottom: 0.2em; margin-left: -0.75em;} 97 | 98 | a {text-decoration: none;} 99 | a:link, a:active {color: #0000AA;} 100 | a:visited {color: #AA00AA;} 101 | div#content a[href]:hover {text-decoration: underline; color: #6666CC;} 102 | :not(a) b { color: #222222; } 103 | .Indent { 104 | margin-left: 2em; 105 | } 106 | .NoIndent { 107 | margin-left: 0; 108 | margin-right: 0; 109 | } 110 | 111 | img { 112 | max-width: 100%; 113 | } 114 | /* pre: code blocks, code: inline code, .Syntax: syntax definition (block/pre or inline/span) */ 115 | pre, code, .Syntax { 116 | font-family: Consolas, Courier New, monospace; 117 | } 118 | :not(.highlight) pre { background-color: #F3F3FF; border: solid 1px #E3E3EF; } 119 | 120 | .Syntax { background-color: #FFFFAA; border: solid 1px #E8E89A; } 121 | code, span.Syntax { padding: 0 1px; } 122 | pre { 123 | margin: 0.7em 1.5em 0.7em 1.5em; 124 | padding: 0.7em 0 0.7em 0.7em; 125 | white-space: pre-wrap; /* works in IE8 but apparently not CHM viewer */ 126 | word-wrap: break-word; /* works in CHM viewer */ 127 | } 128 | pre.Syntax { 129 | margin: 0 0 1.0em 0; 130 | padding: 12px 0 12px 4px; 131 | line-height: 150%; 132 | } 133 | pre.Short /*used with .Syntax*/ { line-height: 120%; } 134 | /* comments */ 135 | pre em, code em { color: #008000; font-style: normal; } 136 | 137 | 138 | /* table of command parameters */ 139 | table.info { 140 | border: solid 2px #C0C0C0; 141 | border-collapse: collapse; 142 | width: 100%; 143 | /*table-layout: fixed;*/ 144 | } 145 | table.info td { 146 | border: solid 2px #C0C0C0; 147 | padding: 0.3em; 148 | } 149 | table.info th { 150 | background-color: #F6F6F6; 151 | padding: 0.3em; 152 | } 153 | 154 | /* version number/requirement tag */ 155 | h1 .ver, h2 .ver, h3 .ver {font-size: 65%; font-weight: normal; margin-left: 1em; vertical-align: top} 156 | h2 .ver {color: lightgray; font-size: 80%;} 157 | .ver, 158 | /* de-emphasized */ 159 | .dull {color: gray;} 160 | .red {color: red;} /* used for highlight in various places */ 161 | .blue {color: blue;} 162 | .green {color: green;} 163 | /* emphasized note */ 164 | .note {border: 1px solid #99BB99; background-color: #E6FFE6; 165 | color: #005500; padding: 0 3px; } 166 | 167 | /* styles for briefly documenting multiple methods on one page: */ 168 | .methodShort { 169 | border: solid thin #C0C0C0; 170 | padding: 0.5em; 171 | margin-bottom: 1em; 172 | } 173 | .methodShort h2 { margin-top: 0; } 174 | .methodShort table.info { border: none; } 175 | .methodShort table.info td { 176 | border: none; 177 | vertical-align: text-top; 178 | } 179 | .methodShort:target { /* non-essential, but helpful if it works */ 180 | border-color: black; 181 | } 182 | 183 | 184 | /********************* 185 | * 186 | * FOR USE WITH DOCS 187 | * BY AVI ARYAN 188 | * 189 | **********************/ 190 | 191 | /** 192 | SOME INSTRUCTIONS 193 | > Use code tag for text that is not a proper part of a sentence. 194 | Eg - You can make Clipjump show a Pasting.. tip when you paste some data. 195 | **/ 196 | 197 | dt{ 198 | font-size: 110%; 199 | background-color: #E4E4E4; 200 | padding: 4px 10px 4px 10px; 201 | margin-bottom: 5px; 202 | border-radius: 7px; 203 | } 204 | dd{ 205 | font-size: 100%; 206 | } 207 | table{ 208 | font-size: 95%; 209 | } 210 | code.key { 211 | color: #2C7D17; font-weight: bold; border: solid 1px #FFFFFF; 212 | } /** Program keywords **/ 213 | strong { 214 | color: #2C7D17; font-size: 110%; 215 | } /** Program keywords **/ 216 | a strong, a code.key { 217 | color: #0000AA; 218 | } 219 | span.ver {font-size: 90%;} /** version **/ 220 | samp, .str { color: #63475B; text-decoration: underline; } /** gui string, fixed text, caption **/ 221 | samp { font-family: inherit; } 222 | var { color: #478192; font-size: 110%;} /** variables in explanation **/ 223 | em {font-family: Courier New; font-size: 120%; font-style: normal;} /** other constants like file names OR code strings **/ 224 | .key { 225 | font-family: Lucida Console; background-color: #FFFFFF; font-size: 110%; 226 | } /** keywords **/ 227 | 228 | .dt { 229 | color: #000000; 230 | font-size: 15px; 231 | font-weight: bold; 232 | } 233 | 234 | .downloadBtn { 235 | padding: 15px; 236 | font-size: 22px; 237 | background-color: #999999; 238 | border: solid 3px #666666; 239 | border-radius: 10px; 240 | color: white; 241 | } 242 | 243 | /* **** kbd.css **/ 244 | 245 | kbd, kbda { 246 | padding: 0.1em 0.6em; 247 | border: 1px solid #ccc; 248 | font-size: 11px; 249 | font-family: Arial,Helvetica,sans-serif; 250 | background-color: #f7f7f7; 251 | color: #333; 252 | -moz-box-shadow: 0 1px 0px rgba(0, 0, 0, 0.2),0 0 0 2px #ffffff inset; 253 | -webkit-box-shadow: 0 1px 0px rgba(0, 0, 0, 0.2),0 0 0 2px #ffffff inset; 254 | box-shadow: 0 1px 0px rgba(0, 0, 0, 0.2),0 0 0 2px #ffffff inset; 255 | -moz-border-radius: 3px; 256 | -webkit-border-radius: 3px; 257 | border-radius: 3px; 258 | display: inline-block; 259 | margin: 0 0.1em; 260 | text-shadow: 0 1px 0 #fff; 261 | line-height: 1.4; 262 | white-space: nowrap; 263 | } 264 | 265 | kbd.inverse, kbda 266 | { 267 | border: 1px solid #E1E1E1; 268 | color: #9B9B9B; 269 | } 270 | 271 | 272 | 273 | /**** MEDIA ****/ 274 | 275 | @media all and (max-width: 1050px) { 276 | 277 | body, div#content, div#realcontent, table { 278 | width: inherit; 279 | padding-left: 0px; 280 | padding-right: 0px; 281 | } 282 | 283 | div#content { 284 | margin-left: 8px; 285 | margin-right: 8px; 286 | } 287 | div#fcontent { 288 | padding-left: 8px; 289 | padding-right: 8px; 290 | } 291 | 292 | header { 293 | width: inherit; 294 | font-size: 16px; 295 | } 296 | } 297 | 298 | @media all and (max-width: 480px) { 299 | /* header .banner { 300 | display: none; 301 | }*/ 302 | div#content { 303 | margin-left: 3px; margin-right: 3px; 304 | } 305 | footer { 306 | height: auto; 307 | } 308 | } -------------------------------------------------------------------------------- /website/assets/mojombo.css: -------------------------------------------------------------------------------- 1 | /** https://github.com/mojombo/tpw/blob/master/css/syntax.css **/ 2 | /*.highlight pre { background: #eeeeee; border: 1px solid;}*/ 3 | .highlight .c { color: #999988; font-style: italic } /* Comment */ 4 | .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ 5 | .highlight .k { font-weight: bold } /* Keyword */ 6 | .highlight .o { font-weight: bold } /* Operator */ 7 | .highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ 8 | .highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ 9 | .highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ 10 | .highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ 11 | .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ 12 | .highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ 13 | .highlight .ge { font-style: italic } /* Generic.Emph */ 14 | .highlight .gr { color: #aa0000 } /* Generic.Error */ 15 | .highlight .gh { color: #999999 } /* Generic.Heading */ 16 | .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ 17 | .highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ 18 | .highlight .go { color: #888888 } /* Generic.Output */ 19 | .highlight .gp { color: #555555 } /* Generic.Prompt */ 20 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 21 | .highlight .gu { color: #aaaaaa } /* Generic.Subheading */ 22 | .highlight .gt { color: #aa0000 } /* Generic.Traceback */ 23 | .highlight .kc { font-weight: bold } /* Keyword.Constant */ 24 | .highlight .kd { font-weight: bold } /* Keyword.Declaration */ 25 | .highlight .kp { font-weight: bold } /* Keyword.Pseudo */ 26 | .highlight .kr { font-weight: bold } /* Keyword.Reserved */ 27 | .highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ 28 | .highlight .m { color: #009999 } /* Literal.Number */ 29 | .highlight .s { color: #d14 } /* Literal.String */ 30 | .highlight .na { color: #008080 } /* Name.Attribute */ 31 | .highlight .nb { color: #0086B3 } /* Name.Builtin */ 32 | .highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ 33 | .highlight .no { color: #008080 } /* Name.Constant */ 34 | .highlight .ni { color: #800080 } /* Name.Entity */ 35 | .highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ 36 | .highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ 37 | .highlight .nn { color: #555555 } /* Name.Namespace */ 38 | .highlight .nt { color: #000080 } /* Name.Tag */ 39 | .highlight .nv { color: #008080 } /* Name.Variable */ 40 | .highlight .ow { font-weight: bold } /* Operator.Word */ 41 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 42 | .highlight .mf { color: #009999 } /* Literal.Number.Float */ 43 | .highlight .mh { color: #009999 } /* Literal.Number.Hex */ 44 | .highlight .mi { color: #009999 } /* Literal.Number.Integer */ 45 | .highlight .mo { color: #009999 } /* Literal.Number.Oct */ 46 | .highlight .sb { color: #d14 } /* Literal.String.Backtick */ 47 | .highlight .sc { color: #d14 } /* Literal.String.Char */ 48 | .highlight .sd { color: #d14 } /* Literal.String.Doc */ 49 | .highlight .s2 { color: #d14 } /* Literal.String.Double */ 50 | .highlight .se { color: #d14 } /* Literal.String.Escape */ 51 | .highlight .sh { color: #d14 } /* Literal.String.Heredoc */ 52 | .highlight .si { color: #d14 } /* Literal.String.Interpol */ 53 | .highlight .sx { color: #d14 } /* Literal.String.Other */ 54 | .highlight .sr { color: #009926 } /* Literal.String.Regex */ 55 | .highlight .s1 { color: #d14 } /* Literal.String.Single */ 56 | .highlight .ss { color: #990073 } /* Literal.String.Symbol */ 57 | .highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ 58 | .highlight .vc { color: #008080 } /* Name.Variable.Class */ 59 | .highlight .vg { color: #008080 } /* Name.Variable.Global */ 60 | .highlight .vi { color: #008080 } /* Name.Variable.Instance */ 61 | .highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /website/clipjumpcontroller.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | rtype: docs 4 | title: Clipjump Controller v0.45 ( Discontinued ) 5 | --- 6 | 7 | Clipjump Controller is discontinued. This page is nothing but a piece of history.

    8 | 9 | Clipjump Controller is a standalone plugin/application to control Clipjump.
    10 | It can control all aspects of Clipjump, even Clipjump's Clipboard Monitoring. 11 |

    12 | 13 | There are 2 modes in which this plugin/application can be used --
    14 |
      15 |
    • Command-line Mode
      16 |
      To run Controller plugin from commandline, you can use Clipjump.exe "plugins\external.controller.ahk" "parameter" to perform desired action. 17 |
      To run ClipjumpControl.exe (the standalone version), you can use clipjumpcontrol.exe "parameter"
      18 |
      19 | 20 |
    • GUI Mode
      21 |
      You can simply run Controller plugin from Plugin Manager or like Clipjump.exe "plugins\external.controller.ahk" to open the GUI. 22 | Thus running Controller without parameter opens its GUI.
      23 | There you will get the whole set of options to control Clipjump.
      24 |
      25 |
    26 | 27 |

    The Options

    28 | There are 3 ways to control Clipjump --
    29 |
      30 |
    1. Selective Disable
      31 |
      As the title is, this will disable only the selected compenents of Clipjump and leave all other un-touched.
      32 | When you run Controller plugin without any parameters , you will see a GUI which will display all the components that can be disabled along with their codes.
      33 | To disable multiple components through the GUI , select them and click OK . The Status Bar will display their summed code . 34 | To access this mode from the commandline, sum up the required codes and send it as the primary switch .
      35 | Code - Clipjump.exe "plugins\external.controller.ahk" sum OR clipjumpcontrol.exe sum where 'sum' is the summed up code.
      36 |
      37 | Codes for disabling various functions are given below - 38 |
          Clipboard Monitoring - 2
      39 |     Paste Mode - 4    
      40 |     Copy file path - 8
      41 |     Copy folder path - 16
      42 |     Copy file data - 32
      43 |     Clipbord History Shortcut - 64
      44 |     Select Channel - 128
      45 |     One Time Stop shortcut - 256
    2. 46 |

      47 | 48 |
    3. Total Disable
      49 |
      This will disable all functionalities of Clipjump and it's code (1048576) will be constant for future versions of Clipjump
      50 | It's switch is 1048576
      51 | Code - Clipjump.exe "plugins\external.controller.ahk" 1048576
    4. 52 |

      53 | 54 |
    5. Enable
      55 |
      This will enable Clipjump with all the components.
      56 | It's code is 1
      57 | Switch = 1
      58 | Code - Clipjump.exe "plugins\external.controller.ahk" 1
    6. 59 |


    60 | 61 | The Standalone Exe can be downloaded from 62 | here 63 |
    64 |
    -------------------------------------------------------------------------------- /website/contact.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | layout: docs 4 | --- 5 | 6 | Clipjump was (and is) developed by Avi Aryan in his spare and non-spare time. The project was started in early 2013. 7 |
    8 | 9 |

    Links

    10 |

    Clipjump's

    11 | Official Page
    12 | Google Group
    13 | Blog
    14 | Github
    15 | Donate
    16 | Autohotkey Topic 17 |

    18 | 19 |

    Author's

    20 | Web page
    21 | Blog
    22 | Github
    23 | Twitter 24 |

    25 | 26 | Join clipjump's google group for support, issues and features requests. 27 |

    28 | 29 |

    Thanks

    30 |
      31 |
    • chaz for great GUI improvements 32 |
    • Ken, Luke, Morpheus, Skrell, rosto, gunner, ScottM and more people at AHK forum for pointing out critical bugs and presenting amazing suggestions. 33 |
    • fump2000 for Ignore(d) Windows manager Tool and great suggestions. 34 |
    • hoppfrosch for doing valuable work on documentation. 35 |
    • just-me for SQLiteDb library and TooltipEx. 36 |
    • nnnik for help on Clipboard formats. 37 |
    • tproli for better icons. 38 |
    • maksnogin for quick testing and reporting that helped Clipjump run on Russian systems. 39 |
    • tic for AutoHotkey GDI+ Library 40 |
    • derRaphael for his UnHTML function 41 |
    • All the translators 42 |
    • Chris and Lexikos for creating Autohotkey without which this program wouldn't have been possible. 43 |
    44 |
    45 | -------------------------------------------------------------------------------- /website/docs/channels.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Channels 3 | layout: docs 4 | --- 5 | 6 | 16 |
    17 | 18 | 19 |

    About

    20 | Clipjump Channels are meant to group related clipboard items. So you can group all (copied) data about your ongoing project in one channel, office work in another channel and so on.. 21 | These channels have a name but are uniquely represented by their IDs. The default channel's id is 0 and is named as Default. 22 | You can use the Channel Organizer to manage your channel and its contents. (accessible from the Action Mode with easy key O). 23 | To activate a channel, you can either use Channel Organizer or Paste Mode. We will see that later. 24 |
    25 | 26 |

    How to Use

    27 | As said above, use the action mode shortcut or the Tray menu to open Channel Organizer window.
    28 | On the top-center region, you will see Active Channel list which will display the currently active channel. On a new installation, it should show Default as the channel 0 is active. Try clicking on that list and you will find that the list has only one element. This is because there is only one channel created by default.
    29 | Suppose you want to create a new channel named "office". On the left side of the window, you will see a list corresponding to the list of channels. Right click on an item in the list 30 | (Default for example) and select New.
    31 | A box will appear asking the name of the channel. Write "office" and then click OK. You will see office has been added to the channel list. If you select it, you will find that the clips pane is empty meaning the channel has no clips. On the other hand, the Active Channel list is now showing office indicating that it is the currently active channel.
    32 | Another thing to notice here is that in the channel list, the number (X-office) before a channel's name is the ID given to it. ID starts from 0 and can go to infinity. Channels are ordered according to their ID's and not alphabetically. Now coming back, let's try copying something.

    33 | 34 | When you copy/cut data, you will see the confirmation tip Transferred to Clipjump to be preceded by the string {office} which will mean that the item you currently copied is going to office channel.
    35 | 36 | Now press Ctrl + V and release V to enter [Paste Mode] . You will see a {office} also preceding the Clip number message Clip x of y . As you have already guessed , this means that the clip is contained in the channel office and that it is currently active.
    37 | 38 | 39 |

    40 | Note - You can use as many as channels you want and give them any name you like.
    41 |
    42 | 43 |

    IMPORTANT

    44 | Channel 0 Default is the main channel of Clipjump. It is the only channel for which the 45 | Minimum Number of Active Clips setting is valid, all other channel have no minimum and thus store unlimited clips.
    46 | Also the setting Retain Clipboard data upon Application restart is invalid on channels other than 0 and so channels with (ID>0) store clips until they are deleted by the user. 47 |

    48 | 49 |

    Changing Channels in Paste Mode

    50 | [v9.5+] You can change channels in the Paste Mode itself by using the Up-down keys . Use the Up arrow key to increment the channel by 1 and use the Down arrow key to decrement the channel by 1. Changing channels via this method works like a cycle , so if you press the Up arrow key with the last Channel (say #2) active , you will be jumped back to the first channel (#0). 51 | 52 |

    53 | 54 |

    Protected Channels

    55 | Protected Channels are user defined special channels that require confirmation before each copy of clipboard data to them.
    56 | If you copy some text while a protected channel is active, you will see a confirmation tip with a sharp beep to proceed further. Only after confirming that message, the clip will be 57 | added to that channel.
    58 | 59 | To create a protected channel, precede it's name with _ i.e. a underscore . Any channel whose name starts with an underscore is a protected channel.
    60 | Tip - To remove the beep, change the variable protected_DoBeep to 0 from ClipjumpCustom.ini.
    61 | The code is protected_DoBeep = 0. Add it in a section with no 'bind', one which is auto-executed at Clipjump start. 62 |

    63 | 64 | 65 |

    The "Pit" Channel

    66 | The Pit channel is a reserved channel NAME with automatic Incognito feature. When a channel is named as Pit, the channel does not transfer it's clips to the Clipjump History thus creating a false Incognito mode situation. Note that when a channel named Pit is active, the Incognito mode is physically not turned ON and so you don't see the Clipjump's tray icon being grayed out.
    67 | The Pit channel can be quickly used to capture junk or confidential data to Clipjump and then delete them all at once with the Delete All. 68 |

    69 | 70 |

    PitSwap

    71 | [v9.5+] PitSwap allows you to jump to an existing Pit channel from any other active channel with the ease of a hotkey. Activated with the Action Mode easy key P , it is a sort of 'channel toggler'. When pressing PitSwap shortcut when a channel such as Default(#0) is active , the channel will be automatically changed to a found Pit named channel. When pressing the shortcut again, the toggle will work in reverse changing the active channel back to the one you were using (here 'Default'). 72 | 73 |

    74 | 75 |

    Tips for better productivity

    76 |
      77 |
    • For channel 0 to 9, you can also use Action Mode to change channels. See How. 78 |
    • In Channel Organizer, don't forget to use Ctrl + G to quickly focus on the Active Channel list and then use arrow keys to change channel. 79 | 80 |
    81 |

    82 | 83 | 84 | -------------------------------------------------------------------------------- /website/docs/examples/ClipjumpCustom.ini: -------------------------------------------------------------------------------- 1 | ;Customizer File for Clipjump 2 | ;Add your custom settings here 3 | ;Note that this file is just to display syntax. 4 | 5 | [AutoRun] 6 | protected_DoBeep=0 7 | spmkey.home=PgDn 8 | pastemodekey.z = y 9 | ACTIONMODE.T = API.executeSection("ibtext") 10 | ACTIONMODE.T_caption = Test Section to Run 11 | 12 | [paste_with_search] 13 | bind=Win+V 14 | spm.active=1 15 | run=paste 16 | run=searchpm 17 | 18 | [paste_current_noformatting] 19 | bind=Ctrl+Shift+V 20 | run=API.runPlugin(noformatting_paste.ahk) 21 | 22 | [ibtext] 23 | noautorun=1 24 | myvar = %inputbox("title text", "write some text")% 25 | tip = %myvar% -------------------------------------------------------------------------------- /website/docs/faq.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: FAQ 3 | layout: docs 4 | --- 5 | 6 |
    7 |
    Translating this HELP
    8 |
    A Translate Link powered by Google Translate has been added at the bottom of each page of this help file.
    9 | Simply Click on the Translate link and you will see that page translated in your language. 10 |
    11 |

    12 | 13 |
    How to change the language of Clipjump ?
    14 |
    Use the About Clipjump option in Clipjump's Tray Menu. (Link) 15 |
    16 |

    17 | 18 |
    The Clear History button in History Tool doesn't delete the recent Clips in Ctrl+V Paste mode?
    19 | OR
    20 | I delete a clip from Ctrl+V Paste mode but it is still there in History Tool ?
    21 |
    The History Tool and the Paste mode are two different components and there clips are independent of each other.
    22 | History Tool is meant for history-keeping whereas Ctrl+V Paste mode is meant to show clips contained in different channels of Clipjump. The record of all 23 | clips added to any of the channels are shown in a single window i.e.History Tool. 24 | On the other hand, clips stored in channels can be managed from the Channel Organizer. 25 |
    26 |

    27 | 28 |
    I can't set a Win key shortcut in Settings Editor ?
    29 |
    This is a limitation of the Hotkey control that is used. You can use the ClipjumpCustom.ini along with the right 30 | Label to create a custom shortcut for yourself.
    31 | Here is an example for creating shortcut Win+K for Hold Clip
    32 |
    [holdclip_win]
     33 | bind = Win + K
     34 | run = holdClip
    35 |
    36 |

    37 | 38 |
    How do I update Clipjump ?
    39 |
    To update Clipjump , follow these steps - 40 |
  • Close Clipjump from the tray menu. 41 |
  • Go to the site and download the latest version. 42 |
  • Extract the latest version from the archive and copy its files. 43 |
  • Paste the files on your current copy of Clipjump such that new Clipjump.exe replaces the old one. 44 |
  • Run Clipjump.exe 45 |
  • 46 |

    47 | 48 |
    Will updating Clipjump preserve my settings , history and clips ?
    49 |
    Yes , you will lose nothing.
    50 |

    51 | 52 |
    I had the copied the file/folder to Clipjump but when I paste it , nothing happens ?
    53 |
  • Make sure that what you are pasting is a [FILE/FOLDER] and not it's path. 54 |
  • Make sure that you are pasting it in a file manager such as Windows Explorer. 55 |
  • Check that the path given by Clipjump's [PASTE MODE] tip exists . This means if Clipjump's tip contains C:\test.txt , then make 56 | sure the file exists. 57 |
  • 58 |

    59 | 60 |
    What is this 'cache' folder ?
    61 |
    The 'cache' folder stores all the clips of Clipjump. The folder was hidden in previous versions.
    62 | It contains folders with channel numbers that stores clips for that channel. eg > (clips for channel 0) , (clips1 for channel 1) and so on. 63 |
    If you look to backup selected channels, you can copy and store clips[n], thumbs[n] and fixate[n] directory for it though it is 64 | usually recommended to stay away from the cache directory. 65 |
    66 |

    67 | 68 |
    Will my clips change if I use the Paste Formats ?
    69 |
    See Here
    70 | 71 |

    72 | 73 |
    I copy an image from Windows Explorer but I don't see it's preview in the Paste Mode ?
    74 |
    The thing you copy when you press Ctrl+C on an image file in Windows Explorer is the link to the file and not the file's data .
    75 | Similarly here, you are not copying the image but the link to the image file. To copy the image to Clipjump , you have 2 ways - 76 |
  • Open the image in an Image editor such as MS Paint. Select a region and then from the Right click menu, select Copy. 77 |
  • Use the Copy File Data feature and press its shortcut while selecting the image file in Explorer 78 | or any other file manager. You will notice the Transferred to Clipjump and then the (previewed) image will be available on Clipjump. 79 |
  • 80 | 81 |

    82 | 83 |
    I have disabled the Retain Clipboard data after Restart feature but the clips in Paste Mode are still there ?
    84 |
    See Here
    85 | 86 |

    87 | 88 | 89 |
    Why do I get the warning Clipjump is not running as administrator ?
    90 |
    When Clipjump, a portable application is placed in drives or folders which don't allow users to write to them , Clipjump will not be able to 91 | save its clips and thus will become of no use. To avoid such a condition, a one time warning is coded into Clipjump to aware users of the 92 | fact. 93 |
    94 |

    95 | 96 | 97 |
    I don't want duplicate data to be stored in Clipjump . What should I do ?
    98 |
    These are some steps you can undertake to avoid redundancy in Clipjump - 99 |
  • Try cleaning Clipjump of [File/Folder] type data with the Delete [File/Folder] plugin. 100 |
  • Whenever doing some work in which you are ought to copy duplicate/crap data to Clipboard (Clipjump) , consider using the Pit channel 101 | .
  • 102 |
  • You can also try Disabling Clipjump if it looks a proper option for you. 103 |
  • 104 | 105 |

    106 | 107 |
    Can History Tool only store distinct history items ?
    108 |
    No. The History Tool in Clipjump is meant to keep track of all the clips that were copied to Clipjump with their timestamps.
    109 | If you are looking to free History disk consumption, try sorting the Window with the 'Size' column.
    110 | 111 |

    112 | 113 |
    I see the error "[The preview/path cannot be loaded]" when pasting data from zip file opened in Windows Explorer ?
    114 |
    This happens because the zip file contents have temporary paths . C:/file.zip/some.txt refers to no browsable location and and so Clipjump is not able 115 | to show the contents.
    116 | 117 |

    118 | 119 |
    I get the 'Pit Channel not found' message when I try to use the 'PitSwap' feature ?
    120 |
    PitSwap as you may know switches to a channel named 'Pit' when it is used. As you probably have not created a channel named 'Pit' , 121 | you are getting this error. Go to the channel selector GUI to create a channel named as 'Pit' and you will be OK.
    122 | 123 |

    124 | 125 |
    How do I see a larger preview of image in the History Preview ?
    126 |
    History Preview window automatically resizes the image contained with its dimensions . You can drag the Preview window from its edges to resize the window with the 127 | respective image. To view the maximum possible size of an image , simply maximize the Preview window. The same applies for Text Previews too. 128 |
    129 | 130 |
    131 | 132 |

    -------------------------------------------------------------------------------- /website/docs/history.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: History Tool 3 | layout: docs 4 | --- 5 | 6 | 7 | 18 |
    19 | 20 |

    Introduction

    21 | Clipboard History tool stores record of all the clipboard items transfered to Clipjump in the last x days. It stores them as a listing in the order of recent first. 22 | The x days can be selected a/c your preference from the settings editor.

    23 | To open the Clipboard History tool , you can also use the H key in Action Mode other than the Tray Menu shortcut. A system level shortcut for the tool can be created from the Settings Editor.
    24 | To load full-size clip from the list provided by History tool, double-click on the item. 25 | To delete a history item , right-click on it and select Delete or select and press Del.
    26 |
    27 | Tip - To view only Clipboard images in the History list, you can filter the listing something like [IMAGE]
    28 | Note - Old users should note that the default system level shortcut Win+C was discontinued from v11.6.1

    29 | 30 |

    Partial Searching

    31 | When the checkbox 'Partial' is checked , the History Tool follows a partial checking pattern. Now you will be able to filter the Histroy List with Space delimited terms and only those clips will be shown which have all those space delimited terms in them. 32 |

    33 | 34 |

    The Preview Window

    35 | The History Preview Window previews the requested history clip. It supports preview of all types of clips from text to images. When previewing text , you have the option 36 | to search for terms (Ctrl+F) and the searching algorithm inhibits the Partial Searching setting from the History Tool.
    37 | When previewing images, you can enlarge the image by resizing the preview windows . Maximize it to see the maximum possible size of the image preview. 38 |

    39 | 40 |

    Insta-Paste

    41 | Press Space or Middle Mouse Button after choosing your desired Clipboard item(s) in the history Gui to paste it directly to the underlying window. 42 | This method necessarily closes the History GUI. When selecting multiple items and then Insta-pasti'ng, the listing order is the order in which the clips are pasted.
    43 | TIP - To force Insta-Paste to write to Clipboard (Clipjump) when it is used, change instapaste_write_clipboard to 1 in the [Advanced] section of Settings.ini file.
    44 | TIP - To not close History Window on Insta-Paste, make HisCloseOnInstaPaste to 0 in the [Advanced] section of Settings.ini file. 45 |

    46 | 47 |

    Incognito Mode

    48 | When in Incognito mode, the Clipboard history will not be captured by Clipjump and the Clipjump icon in the System tray will fade (become greyyish). This feature can be 49 | very useful for maintaining Privacy. To enable Incognito mode, use the Tray menu.

    50 | 51 |

    More Features

    52 | Right Click on an item in the Clipboard History list to view more options like Export Clip, Edit Clip and Delete Clip(s). 53 |

    54 | 55 |

    Edit Clip

    - With the Edit Clip option option, you can edit any clip with the 56 | default Editor or the default Image Editor. 57 | When the editor window shows up, you can make any changes and save the file (Ctrl+S). The clip will be reloaded in the History List once you have closed the editor. 58 |
    Note that this option works for images too. 59 |
    60 | 61 |

    Export Clip

    - Exports the clip to My Documents with the name of exportx.cj where x is 62 | an incremented natural number. The same feature is also available for channel clips through Paste Mode. An exported 63 | clip can then be loaded back into Clipjump using the Copy File Data feature. 64 |
    65 | 66 |

    Hold Clip

    [v11.6+] Hold Clip copies the selected clip to buffer and then allows you to paste it in any window without 67 | disturbing the Clipjump clipboards. The same feature is also available globally. 68 |


    69 | 70 |

    Disabling the History tool

    - Change the Number of days to keep items in History setting to 0 to permanently 71 | disable History tool. This will make Clipjump automatically start with the Incognito Mode on as a symbol to show that History is not captured.
    72 | Please note that disabling the history tool in the way as said above will not delete old history items unlike to the fact that if you change the Number of days to keep items in History from 50 to 2, the history older than 2 days will be deleted by Clipjump. 73 |


    74 | 75 |

    Global Window Shortcuts

    76 |
    77 | F5 - Refresh
    78 | Ctrl+F - Focus on Search box
    79 | 
    80 | -------------------------------------------------------------------------------- /website/docs/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Documentation 3 | layout: docs 4 | --- 5 | 6 |
  • Getting Started 7 |
    8 |
  • Essential 9 | 38 |
  • Semi-Essential 39 | 48 |
  • Accessory 49 | 62 |
  • Authority 63 | 72 |
    73 | 74 |
  • Clipjump in other languages (Translations) 75 |
  • Settings Editor 76 |
    77 | 78 |
  • Complete Developers API listing 79 |
  • Public API 80 |
  • Shortcuts List 81 |
  • TroubleShooting 82 |
  • FAQ 83 |

    84 | 85 |
  • Changelog 86 |
  • Contact 87 |
    -------------------------------------------------------------------------------- /website/docs/ini.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Settings.ini 3 | layout: docs 4 | --- 5 | 6 |

    General

    7 | The file settings.ini is used to store the settings of ClipJump. It's located in the same directory where the Clipjump executable resides. 8 |
    9 | Clipjump provides several methods to manipulate the settings file 10 |

    Advanced Settings

    11 | 12 |

    Setting shortcut to copy to system Clipboard (bypassing Clipjump)

    13 | You can also create a unique shortcut in Clipjump to copy/cut data only to System Clipboard and not Clipjump. 14 | To create these shortcuts, open the [Advanced] section of Settings.ini and write down shortcut values for windows_copy_shortcut and 15 | windows_cut_shortcut. As you may have guessed, these shortcuts are disabled by default and by writing shortcut values for them in the ini you create them. 16 |
    These shortcuts can be very useful when in need to copy sensitive or crap information of the Clipboard. 17 |

    18 | 19 |

    Changing Action Mode Easy keys

    20 | Action Mode keys can be changed through ClipjumpCustom.ini, please see this example.
    21 | To disable a key, empty its value. In the following example, F1 AND L keys are removed.
    22 | {% highlight ini %} 23 | [actionmode_delete_bad_keys] 24 | ACTIONMODE.F1= 25 | ACTIONMODE.L= 26 | {% endhighlight %} 27 |
    28 | 29 |

    Using Win as Paste Mode key instead of Ctrl [v12.3+]

    30 | To use Win instead of Ctrl for activating and controlling Paste Mode, set the option WinForPasteMode = 1 in the [Advanced] section of settings.ini. It is recommended to use the plugin IniEditor to do so. Don't forget to restart Clipjump after updating Settings.ini. 31 | 32 |

    33 | 34 |

    Using Win-C and Win-X for copy and cut to Clipjump [v12.5+]

    35 | With the setting "Use Win-based shortcut for copy/cut to Clipjump" in the Settings Editor, you can copy/cut to Clipjump using Win-C and Win-X respectively. 36 | Now, Ctrl-C and Ctrl-X will have no effect on Clipjump and the clipboard changes through them will be ignored. 37 | This setting changes the Using Win as Paste Mode key (Link) setting with it. 38 | So you can use the usual Ctrl-C,X,V for interacting with system clipboard and Win-C,X,V for interacting with Clipjump clipboards. 39 | 40 |

    41 | 42 |

    Showing the Pasting tooltip

    43 | You can make Clipjump show a Pasting.. tip when you paste some data. To do so, change the value of 44 | Show_pasting_tip in the [Advanced] section of Settings.ini to 1. 45 | 46 |

    47 | 48 |

    Changing default Task Priority

    49 | You can change default Clipjump Task priority from the Priority key in the System section of the Ini. 50 |
    Set Priority to H (high) to make Clipjump most responsive.
    Priority Values can be-
    51 |
    L (or Low), B (or BelowNormal), N (or Normal), A (or AboveNormal), H (or High), R (or Realtime)
    52 | 53 |

    54 | 55 |

    Capture clipboard changes only through Ctrl-C and X [v12.5+]

    56 | Changing the setting monitorClipboard in the Main section of Settings.ini to 0 will make Clipjump ignore any clipboard change other than one done by Ctrl-C or Ctrl-X. (or Win-C and Win-X if you have enabled the setting) 57 | 58 |

    59 | 60 |

    Make Clipjump flush RAM contents to disk [v12+]

    61 | The RAM_flush option when enabled instructs Clipjump to flush its RAM memory data to hard disk at needed intervals. 62 | Thus Clipjump will take much less RAM (<= 1.5 MB) but the overall performance may be affected. I recommend keeping this option disabled (set to 0) which is what it is by default. 63 | You can find RAM_flush in [System] section of Settings.ini 64 | 65 |

    66 | 67 |

    Show paste mode at fixed position

    68 | You can fix the Paste Mode's screen position by adding values to variables pstMode_X and pstMode_Y in the Advanced section of the Ini.
    69 | The X coord is pixels from left of the screen whereas the Y coord is pixels from top of the screen.
    70 | You can also leave either of the coords blank and only the specified axes (X or Y) will be fixed for the paste mode. 71 |
    -------------------------------------------------------------------------------- /website/docs/organizer.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Channel Organizer 3 | layout: docs 4 | --- 5 | 6 | [v11+]

    7 | 8 | Channel Organizer shows data stored in various channels of Clipjump and performs basic functions to manage them.
    9 | It can be activated from the Action Mode using the key O but the user can also create a system-level shortcut for it through the Settings Editor.

    10 | 11 | The left side list shows all the channels you have created with their channel numbers. The topmost item in the list i.e. the blank item shows clips of all the 12 | channels when it is selected.
    13 | Users can right-click on the clip to view options that are available.
    Many options have also been made accessible through buttons that are in between the 14 | two lists. The buttons do the common functions for both channels as well as clips and the top horizontal arrow indicates the direction for which other buttons 15 | will perform.

    16 | 17 | Options available like Insta-paste, edit clip, preview, search are all inspired from the History Tool.
    18 | You can edit clip's tags and fixate status using the Properties option in Context Menu. Make fixed = 1 in Properties to enable FIXATE option for a clip.
    19 |
    20 | 21 | 22 | The New Clip button (Ctrl+N) can be used to create new clip in the currently selected channel. If all channels are selected i.e. the blank item, the clip is created in 23 | channel 0.
    24 |
    25 | 26 | The Delete option currently doesn't support multi-selection so you will be available to delete only one item at a time.

    27 | 28 |

    Preferences

    29 |
      30 |
    • To make Channel Organizer show all clips i.e. choose no channel by default on startup, make the variable ini_OpenAllChByDef equal to 1.
      31 | You will have to use ClipjumpCustom.ini for the purpose. Just add the line ini_OpenAllChByDef = 1 in a 32 | non-auto-executing section.
    • 33 |
    34 | 35 |
    36 | 37 |

    Global Window Shortcuts

    38 |
    39 | F5 - Refresh
    40 | Ctrl+N - Create new clip
    41 | Ctrl+Shift + N - Create new channel
    42 | Ctrl+G - Set focus to Active Channel list
    43 | Ctrl+F - Set focus to search box
    44 | Alt+A - Set focus to Channel list (on the left)
    45 | Alt+S - Set focus to Clips list
    46 | 
    47 | -------------------------------------------------------------------------------- /website/docs/plugins/basics.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Plugin Development 3 | layout: docs 4 | --- 5 | 6 |
      7 |
    1. Introduction 8 |
    2. The filename 9 |
    3. Plugin parameters 10 |
    4. Script/Function parameters 11 |
    5. Conventions 12 |
    6. Plugin Classes 13 | 14 |
    7. Things to Note 15 |
    8. Libs 16 |
    9. Developers Complete List 17 |
    18 | 19 |

    20 | 21 |

    Introduction

    22 | Plugins are AutoHotkey scripts that are run by the Clipjump.exe which is nothing but AutoHotkey.exe in disguise.
    23 | Some plugins are included in the program at runtime, some are not (external class). There is no limit on the number of plugins and they can be always accessed from 24 | the Plugin Manager (ActionMode = M) 25 |


    26 | 27 |

    The Filename

    28 | The filename of the plugin symbolizes the function it is supposed to contain.
    If filename is myplugin.ahk , it means the plugin file contains a 29 | plugin_myplugin() that is run by the Plugin Manager or API.runPlugin(). If the filename is pformat.noformatting.ahk , the 30 | main function the file has is plugin_pformat_noformatting(). 31 |


    32 | 33 |

    Plugin Parameters

    34 | If you open any of the officially distributed plugins in Notepad, you will see lines starting with ;@Plugin-. These hold the key-value pairs that 35 | have information about the Plugins.
    36 | So ;@Plugin-Name myplugin gives the key name for the plugin the value myplugin. As you may have guessed this is the 37 | same thing you see when you click on Properties in the Plugin Manager.
    38 | There is no limit on what can be the 'key' here. Even ;@Plugin-authorSite http://mysite.com also works and is shown in the Properties window. 39 |


    40 | 41 |

    Script/Function parameters

    42 | The Plugin parameters like ;@Plugin-param(N) where N is a natural number are the Function parameters (like ;@Plugin-Param1). 43 | They hold information about the Nth parameter of the main function in the plugin file. 44 | When you run a plugin with API.runPlugin( plugin_filename , param1, param2 ....) without any 'param's , the function auto-asks you the parameters 45 | showing these informations if they are present. 46 | You can provide a parameter as ;@Plugin-Silent 1 to force API.runPlugin() to not ask the user for parameters even if no parameter is passed to it.
    47 | Function parameters are not Mandatory but it is recommended to provide them. 48 |


    49 | 50 |

    Conventions

    51 |
      52 |
    1. Variable Names in plugin files that are included (not external) should start with z. This is because Clipjump doesn't uses any variable starting with 53 | 'z' and so this is the best option to avoid variable conflicts. 54 |
    2. The parameter names in the function definition ( plugin_myplugin(zParam1, zParam2) ) should also start with 'z'. 55 |
    56 | TIP- You can use the STORE object to also store variables. It is a global object and is totally meant for storing by plugins and through 57 | ClipjumpCustom.ini. Eg> STORE.myvar := "text" and zVar := STORE.myvar 58 |


    59 | 60 |

    Plugin Classes

    61 | 'Classes' is a way to distinguish certain plugins from normal plugins. All the plugins whose name is like a.b.ahk and not b.ahk mean they belong 62 | to a class (here a).
    63 | As already said, these files have main function like plugin_a_b(). 64 | Currently Clipjump has 2 defined classes. User is not allowed to create them. (i.e. create a file like xyzPlugin.coreScript.ahk) 65 |

    66 | 67 |

    pformat

    68 | The plugins in this class are used in the paste-format option in Paste mode (key = Z). Officially distributed plugins like pformat.sentencecase.ahk and 69 | pformat.noformatting.ahk belong to this class.
    70 |
      71 |
    1. These plugins also have a custom mandatory parameter ;@Plugin-Previewable which should hold 1 if the paste format is previewable in Paste Mode. 72 | It is 1 for SentenceCase.
    2. 73 |
    3. These Plugins should make STORE.ClipboardChanged true if they have successfully changed the input variable and thus what is going to be pasted. 74 |
      For example STORE.ClipboardChanged := true 75 |
    4. It should be noted that these plugins (should) have 1 input parameter. See the file 'pformat.sentencecase.ahk' for example.
    5. 76 |
    6. When toggling and when pasting, Clipjump inputs the Clipboard variable and not the ClipboardAll variable as the first parameter. 77 | If the plugin needs the ClipboardAll variable, it can consult it anytime as it will be the same as what current active
    7. 78 |
    79 |
    80 | 81 |

    external

    82 | Plugins whose name starts with external. belong to the 'external' class. They are not included in Clipjump at runtime and solely run through the 83 | AutoHotkey.exe (i.e. Clipjump.exe) when needed.
    84 | The Parameters in external plugins ? Like Function parameters , the external script file can contain -Param1, 85 | -Param2 and so.. for the API.runPlugin() to take them as Script parameters and thus ask the user if they pass no paramter.
    86 | For example try running the external.controller.ahk and then seeing its source code. 87 |


    88 | 89 |

    Things to Note

    90 |
      91 |
    1. Use ;@Plugin-Silent 1 to make API.runPlugin() not ask the user for parameters even if user doesn't enters them. 92 |
    2. It will be a good idea to use API.showTip() and 93 | API.removeTip() (Link) 94 |
    3. While testing keep in mind that your plugin will be included in Clipjump.ahk and thus run from the directory of Clipjump.ahk. So be careful with the WorkingDir 95 | factor. 96 |
    4. There will be no auto-execution of any plugin as a non-external plugin will be included at the bottom of Clipjump.ahk 97 |
    5. Please reload Clipjump when you change/add a plugin file to load it into Clipjump. 98 |
    6. Make sure to have a look at The Complete Developer List and the public API 99 |
    100 |

    101 | 102 |

    Libs

    103 | If your plugin file requires more files as #Includes, consider keeping them in (file_name).lib directory. So for the plugin external.controller.ahk 104 | we have external.controller.lib as the lib directory. This makes the Delete Plugin option in Plugin Manager work. 105 |

    -------------------------------------------------------------------------------- /website/docs/plugins/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Plugins 3 | layout: docs 4 | --- 5 | 6 | Plugins are AutoHotkey scripts that are placed in the plugins folder in Clipjump.exe directory.
    7 | They can be accessed from the Plugin Manager that runs with the M key in Action Mode. 8 |

    9 | 10 | 11 |

    Plugin Manager

    12 | Plugin Manager is a small tool that lets you deal with currently installed plugins. You can access it with key M from Action Mode or from Tools submenu in Clipjump's Tray menu.
    13 | The UI is kept minimal and you have to right Click on a plugin row to show the various options available.
    14 | The Edit Option opens the plugin's source code. After making changes to a plugin or after adding a new plugin, restart Clipjump to make that plugin effective. 15 |

    16 | 17 |

    Installing a plugin

    18 | Simply copy the .ahk file with all other dependent files in the plugins directory and restart Clipjump.
    19 | Note - Clipjump lists all plugins to use at ExitTime and not at runTime. Thus Restarting Clipjump after making changes to plugins is necessary. 20 |
    21 | TIP - To disable a plugin temporarily, create a folder named (for example) _Disabled in the plugins folder and move the plugin to it. 22 |

    23 | 24 |

    Running a plugin from ClipjumpCustom

    25 | The API.runPlugin( plugin_file_name , param1 , param2 , param3 , ..... ) can be used to run a plugin.
    26 | If no parameter (param) is passed at all , then the user will be automatically asked for the needed number of parameters. Below are suitable examples - 27 | {% highlight ini %} 28 | [some_section] 29 | noautorun=1 30 | run = API.runPlugin( some_plugin.ahk ) 31 | 32 | [some_section2] 33 | bind=Win+Alt+K 34 | run = API.runPlugin( some_plugin.ahk , the_text , the_title ) 35 | {% endhighlight %} 36 |

    37 | 38 |

    Creating your own plugins

    39 | If you know the AutoHotkey language, you won't take a minute starting creating your first plugins. If you are not familiar with AutoHotkey, I recommended 40 | trying it as it is the ever so easy and suprisingly powerful programming langauge. You won't regret.
    41 | See Plugins Basics 42 |

    43 | 44 |

    Officially Distributed Plugins

    45 |
      46 |
    1. General 47 |
      1. Hotstring-Paste - A very raw sample plugin that helps you to create Hotstrings to paste, i.e. you type a text and a clip stored by Clipjump is pasted. 48 |
      2. NoFormatting paste - Pastes current clipboard trimming off any formatting (like HTML). 49 |
      3. Delete [File/Folder] - Deletes clips of data type [File/Folder] from selected or all channels. 50 |
      4. Sync Clipjump Clipboard - Updates clipjump with the current system clipboard 51 |
      52 |
    2. Paste Formats 53 |
      1. Common Formats 54 |
      2. Trim Formatting 55 |
      3. SentenceCase 56 |
      57 |
    3. External 58 |
      1. Ini Editor - by rbrtryn, Added as a secondary interface to edit Settings.ini 59 |
      2. Ignored Windows Manager - by fump2000, allows you to manage windows which will be automatically ignored by Clipjump 60 |
      3. History file paths cleaner - Deletes copied file and folder paths from clipboard history 61 |
      4. Translation File Cleaner - Detects invalid and duplicate keys in language files and displays them 62 |
      63 |
    64 |

    65 | 66 |

    More Plugins

    67 | Third party plugins can be downloaded at the Official Addons page
    68 | -------------------------------------------------------------------------------- /website/docs/plugins/plugin_commonformats.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Common Formats Plugin 3 | layout: docs 4 | --- 5 | 6 | version 0.61 7 |
    8 | 9 |

    Introduction

    10 | Common Formats is a pformat plugin that lets you paste the clip with various inbuilt paste formatting. 11 | Users can add more formats in the pformat.commonformats.lib/user.ahk file.
    12 | Note - This file is not present by default. It is created when the Common Formats plugin runs for the first time ( either from the plugin manager or paste mode ).

    13 | 14 |

    Using

    15 | Once you have selected the Common Formats paste-format, releasing Ctrl to paste will bring up the GUI. 16 |
    Use Up or Down keys or mouse to select your needed format and press Enter or OK button to paste.
    17 | You can press Esc or simply close the GUI to cancel the paste operation. 18 | Selecting the paste-format None will paste the original clip without making any changes. 19 |

    20 | 21 | The Apply button applies the current changes made the the formatting to the clip to be pasted. Thus it helps you in applying multiple formats to a clip in 22 | the needed order. Note that the None paste format will still paste the real original clip and the 'apply' won't be undertaken. 23 |

    24 | 25 | Input Field is used by formats that have parameters in addition to the input text. RegExReplace for example uses input field to get the other 2 parameters, 26 | the match needle and the replacement text and the users are supposed to enter these two paramters one in a line (line by line). 27 |

    28 | 29 |

    List of Formattings available

    30 |
    31 | BBCodeList
    32 | DeHTML
    33 | HTMLList
    34 | lowercase
    35 | TrimFormatting
    36 | NumberedList
    37 | RegexReplace
    38 | TrimWhiteSpace
    39 | UnHTML
    40 | UPPERCASE
    41 | 
    42 | 43 |

    Porting an existing pformat to under Common Formats

    44 | To make any independent pformat a part of the Common Formats, you can simply copy its code to the pformat.commonformats.lib/user.ahk file.
    45 | Then replace the main function name plugin_pformat_name by plugin_pformat_commonformats_name where name is the name of that independent pformat. Also it will be a good idea to study the code of pformat.commonformats.ahk first. 46 |

    47 | 48 | You can also create a new format under the Common Formats user file. It should be easy provided you know AutoHotkey. 49 | Just make sure you name the new format function as plugin_pformat_commonformats_MYNAME where MYNAME is the unique name of your format and this is what that will appear in the GUI. (Related: pformat) 50 | 51 |

    52 | Info Data for the format shown in the respective field is nothing but data stored in STORE object as STORE["commonformats_" formatName] 53 | where formatName is the name of the format such as RegexReplace. 54 |

    55 | -------------------------------------------------------------------------------- /website/docs/plugins/plugin_hotpaste.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: HotPaste Plugin 3 | layout: docs 4 | --- 5 | 6 | 12 | 13 |

    Introduction

    14 | HotPaste plugin, an idea inspired from AutoHotkey hotstrings helps you create hot-words that perform action when you type. The basic actions can be pasting a text from a 15 | Clipjump channel or through a function.
    16 | Raw strings can be pasted from API.pasteText() function whereas clips can be pasted from API.paste(channel, clip) function. The 17 | pasteText() will only be able to paste unformatted text so for any HTML or picture type of clip, you will have to rely on paste(). 18 |
    You can create Hotpastes (i.e. "Hot-words") in the plugins\hotpaste.lib\base.ahk file. This file in not distributed by default and you will have 19 | to run HotPaste from the Plugin Manager to have this file created. Once created, you will have to edit the file to add your HotPastes.
    20 | After editing base.ahk, restart Clipjump to have your edits loaded. 21 |
    22 | 23 |

    Basic syntax and Usage

    24 | A simple base.ahk goes as- 25 |
    26 | ; writing 'cj_site' followed by a space/Enter/Tab will PASTE the site URL
    27 | ::cj_site::
    28 | 	API.PasteText("http://clipjump.sourceforge.net")
    29 | 	return
    30 | 
    31 | ; writing 'my_add' followed by a space/Enter/Tab will PASTE 2nd clip of channel 0
    32 | ::my_add::
    33 | 	API.Paste(0, 2)
    34 |  	return
    35 | 
    36 | 37 | The above code creates two HotPastes - cj_site and my_add. 38 |
      39 |
    • As the comments read, writing cj_site and then pressing Enter or Space or Tab will replace the typed 'cj_site' by 40 | http://clipjump.sourceforge.net. The PasteText() function is responsible for pasting this plain text. Note that I have surrounded the literal string in quotes ("").
    • 41 |
    • The 2nd HotPaste my_add when typed invokes Paste() function of the API to paste clip 2 of channel 0. The typed text 'my_add' will be replaced by the clip 2 of channel 0 in this case. 42 | As this time there is no literal string as input, I have not used quotes.
    • 43 |
    44 |
    45 | So the basic syntax is - 46 |
    47 | ::HOTPASTE::
    48 | 	API.Paste or API.pasteText
    49 | 	return
    50 | 
    51 | If you have knoweledge of AutoHotkey, there is no limit to what HotPaste can do for you. After all, HotPaste is a simple plugin that uses the core feature of AutoHotkey for its purpose.
    52 | BTW, this doesn't mean you will have to learn AutoHotkey (AHK) to use it. This simple tutorial will be sufficient. 53 |
    54 | 55 |

    Examples

    56 |

    Pasting multi-line text

    57 | Multiline separator in Autohotkey is `n. 58 |
    59 | ::longstr::
    60 | 	API.PasteText("103, Abc road`nCantt. Area`nXyz`nIndia")
    61 | 	return
    62 | 
    63 | 64 |
    65 | 66 |

    Pasting 2nd clip of current channel

    67 | CN.NG variable contains the current active channel number. See more variables. 68 |
    69 | ::2ndlast::
    70 | 	API.Paste( CN.NG, 2 )
    71 | 	return
    72 | 
    73 |
    74 | 75 |

    End notes

    76 |
      77 |
    • Make sure you resart Clipjump after changing base.ahk to have the changes loaded. 78 |
    • It will be a good idea to fix clips that you access through API.Paste() because of the simple reason that 79 | clip number will change on addition of new clips. It would be better if you maintain all such FIXED clips in an entirely different channel to avoid workflow problems. 80 |
    81 | 82 |

    83 | -------------------------------------------------------------------------------- /website/docs/settings.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Settings Editor 3 | layout: docs 4 | --- 5 | 6 |

    General

    7 | 8 | Clipjump Settings Editor provides a visual interface to change the basic settings of Clipjump.
    9 | The Settings Editor is located in Tray Menu and can be accessed via Tray Menu>Tools>Settings or via Action Mode easy key E (i.e: Ctrl+Shift+A-E). It offers access to the most common settings.
    10 | To get help on any setting, keep the mouse static for a while after moving the mouse pointer over it . A Tooltip with description text should pop-up. 11 |
    12 | After changing settings, hit Apply and then OK. 13 |

    14 | 15 |

    Tips

    16 |
      17 |
    • To disable a shortcut , set it to None . You can do this by focusing cursor in the Shortcut box and then tapping Backspace once. 18 |
    • Keep Threshold = 1 to have the Maximum number of active clipboards equal to the 19 | Minimum number of Active clipboards. 20 |
    • To reset the last formatting used in Paste mode (Ctrl+V) , check the option "Always start paste mode with the default formatting". 21 |
    • If you don't like holding down Ctrl in Paste Mode, check the option 22 | Start Paste mode with search enabled to start paste mode with search box. 23 |
    • Avoid using Alt only shortcuts as they can cause conflicts with other applications. 24 |
    25 | 26 |

    Alternative ways to change settings

    27 | 28 | If you want to change advanced settings, the Settings Editor is not able to do this and you have to use different tools: 29 | 30 |
      31 |
    • Clipjump plugin: IniEditor - As part of the official distribution Clipjump provides a generic editor for INI-Files 32 | as a plugin. This plugin named IniEditor can be used to edit settings.ini as well as any other ini-File.
    • 33 |
    • Standard Text-Editor - If you want to manipulate some more advanced settings (see below), you may directly open the settings.ini file via 34 | a plain text editor
    • 35 |
    36 | 37 | -------------------------------------------------------------------------------- /website/docs/shortcuts.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Shortcuts List 3 | layout: docs 4 | --- 5 | 6 | 15 | 16 |

    General (System Wide)

    17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
    Ctrl + VPaste Mode
    Ctrl + Shift + AAction Mode
    28 | 29 |
    30 | 31 |

    Paste Mode

    32 | Ctrl + V is used to enter the [Paste Mode] (see also here).
    33 | As releasing both keys inserts the current displayed clip, the key sequence 34 |
      35 |
    • Press Ctrl + V
    • 36 |
    • Keep Ctrl pressed
    • 37 |
    • Release V
    • 38 |
    39 | enters the intrinsic [Paste Mode]. While being in Paste Mode (Ctrl pressed) a few more actions can be performed by pressing keys: 40 | 41 |
     42 | V - Move forward through Multiple Clipboards (from 1 to 2 , 2 to 3, …)
     43 | C - Move backward through Multiple Clipboards (from 3 to 2 , 2 to 1, …)
     44 | S - Add current Clip to Windows Clipboard
     45 | X - Toggle between Cancel, Delete, Copy, Move and Delete All MODE 
     46 | E - Export current clip
     47 | A - Jump to first clip
     48 | F - Activate Search / Entering [Search-Paste Mode]
     49 | H - Edit Clip
     50 | Z - Toggle pasting formats
     51 | T - Add tags to clips
     52 | Q - Move clip to first position
     53 |  (i.e. Enter) - Start Multiple Pasting Session
     54 | Space - Fix/un-fix a clipboard at its position (Fixate)
     55 |  (i.e. Up) - Change channel to 1 up (+1)
     56 |  (i.e. Down) - Change channel to 1 down (-1)
     57 | 1..9 - Move to clip {num} ahead/behind of current clip
     58 | Shift - Hold Shift with Ctrl to delete clip after pasting. See Paste Popping
     59 | F1 - View listing of all keys in Paste Mode
     60 | 
    61 | 62 | See this ClipjumpCustom.ini example to change these keys
    63 | 64 |
    65 | 66 |

    Search in Paste Mode (Search-Paste Mode)

    67 | The following key sequence enters [Search-Paste Mode] while being in [Paste Mode] (see also here): 68 |
      69 |
    • While Ctrl pressed ... (i.e. while being in [Paste Mode])
    • 70 |
    • Press F
    • 71 |
    • Release Ctrl and F
    • 72 |
    73 | Now you are in [Search-Paste Mode] and several commands are available via keypress: 74 |
     75 | Enter - Paste
     76 | Home / Esc - Cancel
     77 |  (i.e. Up) - Move one clip up (+1)
     78 |  (i.e. Down) - Move one clip down (-1)
     79 | Ctrl+[Paste Mode] key - execute a [Paste Mode] feature when [Search-Paste Mode] is active
     80 | Ctrl + Enter - [Multipaste Mode] within [Search-Paste Mode]- Paste without closing the [Search-Paste Mode] (releasing Ctrl does NOT cancel the [Search-Paste Mode] here)
     81 | Ctrl + F, then release F - Switch back to [Paste Mode]
     82 | 
    83 | 84 | See ClipjumpCustom.ini to change these keys
    85 | 86 |
    87 | 88 |

    Cancel, Delete, Copy, Move and Delete All Mode

    89 | While being in Paste Mode, pressing X repeatedly toggles between several modes: 90 | 91 |
     92 | X - [Cancel Mode] - cancel the current paste operation
     93 | X - X - [Delete Mode] - delete current clip
     94 | X - X - X - [Move Mode] - Move clip to a different channel
     95 | X - X - X - X - [Copy Mode] - copy clip to a different channel
     96 | X - X - X - X - X - [Delete All Mode] - deletes all clips
     97 | 
    98 | 99 | Note that [Cancel Mode], [Delete Mode], [Move Mode], [Copy Mode] and [Delete All Mode] are inter-related. The program cycles through these modes when you press X while holding Ctrl.
    100 | So, pressing X while holding Ctrl in [Delete All Mode] will switch back to [Cancel Mode]. 101 | 102 |

    103 | 104 |

    Action Mode

    105 | 106 | Ctrl + Shift + A is used to enter the [Action Mode] (see also here). A dialog box pops up, offering a lot more "actions" which can be performed. These actions can be accessed via keypress: 107 | 108 |
    109 | B - Hold Clip
    110 | C - Copy File path(s)
    111 | D - Disable Clipjump
    112 | E - Settings
    113 | F - Copy File Data
    114 | F1 - Help
    115 | F2 - Paste Mode Shortcuts
    116 | H - Clipboard History
    117 | L - Ignore Windows Manager
    118 | M - Plugin Manager
    119 | 0 - Channel Organizer
    120 | P - PitSwap
    121 | T - One Time Stop
    122 | U - Sync Clipjump Clipboard
    123 | X - Copy active folder path
    124 | Esc - Exit Action Mode Window
    125 | 
    126 | 0..9 - Activate channel whose ID (number) is pressed 127 |
    128 | 129 | The hotkey for [Action Mode] can be user defined. (see: ClipjumpCustom and Settings Editor to change this key)
    130 | 131 | To change Action Mode easy keys, see Changing Action mode keys
    132 | 133 | -------------------------------------------------------------------------------- /website/docs/translate.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Translations 3 | layout: docs 4 | --- 5 | 6 | 7 | 10 | 11 |
    12 | 13 |

    Overview

    14 | By default, Clipjump starts up in English and is also available officialy in the following languages.

    15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
    LanguageTranslator
    Chinesetuzi
    Germanfump2000, hoppfrosch
    SwedishÅke Engelbrektson
    Russianmaksnogin
    Dutch (Nederlands)Fred Van Waard
    Portuguese (Brazilian)Leonardo Lehnemann

    26 | 27 | These Langauge files are located in the languages folder of Clipjump's directory and are merely text files having a ini-type 28 | var=value structure. 29 |
    To change languages, double click Clipjump's Tray icon or right-click it and select About Clipjump. There you will be find the list of all 30 | the language files found in the languages folder. Select one and it is automatically applied, no restart needed. 31 |


    32 | 33 |

    Getting it in your Language

    34 | Clipjump has also been translated in many other major languages like French, Japanese, Spanish, Italian and Russian by the author using his program 35 | Ini Translator. If you want to download any of the above listed translation files, the official 36 | Clipjump translations page lists them all and they can be downloaded on-demand. 37 |


    38 | 39 |

    Translating

    40 | If you look forward to add your language to Clipjump, I will be happy to recieve it and make it available in the future versions of Clipjump. 41 |
    To start off, you can use the Ini Translator program to create a base translation file 42 | from the languages/english.txt file in your language to work on. Then you can correct the few grammar mistakes the Translator may have made in the 43 | translation and send it to me.

    44 | Here is the Preserve keywords list that I use with Ini Translator -
    45 |
    NO-FORMATTING
    46 | Clipboard
    47 | Insta-Paste
    48 | Action Mode
    49 | Channels
    50 | Channel
    51 | Ignore(d) Windows
    52 | One Time Stop
    53 | Ignore Windows Manager
    54 | languages/english.txt
    55 | pitswap
    56 |
    57 | Note - Consider saving the translation file in UTF-8 BOM encoding when translating a Unicode language. 58 |

    59 | -------------------------------------------------------------------------------- /website/docs/troubleshooting.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Troubleshooting 3 | layout: docs 4 | --- 5 | 6 | 7 |
    I see Japanese / Chinese characters as boxes ?
    8 |
    This is a uncommon Windows Issue 9 | and has nothing to do with Clipjump. To fix it , create a text-file named as 火 or some other chinese on the Desktop and logoff and on. You should be back to normal. 10 |
    11 | 12 |

    13 | 14 |
    Clipboard change is not captured and Settings are not saved
    15 |
    Clipjump will need to have 'write access' to the folder it is placed in. So if you are placing Clipjump in C:\ drive like Program Files/Clipjump you 16 | might need to run Clipjump as administrator to have disk rights. If you don't want to run it with administrator privileges, place it in other local drive 17 | like D:\ or another folder like My Documents where it will have rights to "atleast" write to its own folder.
    18 | 19 |

    20 | 21 |
    Paste Mode not opening when pressing Ctrl+V
    22 |
    If you are seeing this bug when certain windows are active, then this happens because the active's application keyboard hook is processed before Clipjump's. 23 | To overcome this issue, run Clipjump as administrator. Open Clipjump.exe properties, go to Compatibilty and check 24 | Run this program as administrator. 25 | 26 |

    27 | 28 |
    Error on Program startup
    29 |
    Majority of these errors happen because of syntax errors in a plugin. The Error message box contains all information about the error the plugin and where it is 30 | faulty in this case. In the image shown below, the first arrow shows the file (the plugin file) with the error and the second arrow shows the line number where 31 | it is faulty.
    32 |
    33 | To get rid of the problem, simply remove that plugin from the plugins folder and then try contacting its developer. A screenshot of the error box will help.
    34 | 35 |

    36 | 37 |
    Icons missing in Channel Organizer
    38 |
    As of v11.6, font icons are used in Channel organizer which are loaded from icons\octicons-local.ttf. Therefore first of all make sure that you 39 | have updated to v11.6 and the font file is present. If still there are problems, try installing the font octicons-local manually and then restarting 40 | Clipjump. Log an issue if you still have problems.
    41 | 42 |

    43 | 44 |
    My plugins don't show in the Plugin Manager
    45 |
    If you have placed a plugin file or edited one while Clipjump was running, it will not be loaded into the program. You will have to restart Clipjump (preferrably 46 | from the System Tray Menu) to load it.
    47 | 48 |

    49 | 50 |
    I see an error not listed on this page
    51 |
    Contact the author and that will be fixed in the next version. :-)
    52 | 53 |

    54 | -------------------------------------------------------------------------------- /website/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/favicon.ico -------------------------------------------------------------------------------- /website/images/COPY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/COPY.png -------------------------------------------------------------------------------- /website/images/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/cancel.png -------------------------------------------------------------------------------- /website/images/channelpaste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/channelpaste.png -------------------------------------------------------------------------------- /website/images/copyclip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/copyclip.png -------------------------------------------------------------------------------- /website/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/delete.png -------------------------------------------------------------------------------- /website/images/fixate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/fixate.png -------------------------------------------------------------------------------- /website/images/pasting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/pasting.png -------------------------------------------------------------------------------- /website/images/path.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/path.png -------------------------------------------------------------------------------- /website/images/pformat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/pformat.png -------------------------------------------------------------------------------- /website/images/pluginerror.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/pluginerror.png -------------------------------------------------------------------------------- /website/images/trayicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aviaryan/Clipjump/6777987212bd8404c73ec27c81af4b55b4059a6f/website/images/trayicon.png -------------------------------------------------------------------------------- /website/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Clipboard Manager 4 | homepage: 1 5 | --- 6 | 7 | 8 | Clipjump is a multiple clipboard management utility for Windows. 9 | It was built to make working with multiple clipboards super fast and super easy. 10 | The program records changes in the system clipboard, stores them without any limits and provides innovative ways to work with them. 11 |

    12 | 13 |
    14 |

    The basic ideas on which Clipjump is built upon

    15 |
      16 |
    • No extra shortcuts needed to manage multiple clipboards in Clipjump, go with your default Ctrl + C,X and V. 17 |
    • Not just the text. All Clipboard formats are supported. 18 |
    • No opening a GUI and looking for your clip to paste it. Everything happens from Ctrl+V here, the pasting operation is superfast. 19 |
    • Portability and Speed 20 |
    • Multilingual and Open Source 21 |

    22 | 23 | The main idea of Clipjump is to make the clipboard management process fast as well as powerful. As a result, there are lots of features in here to suit your needs. 24 | 25 |

    26 | 27 |
      28 |
    • Paste Formats - Format text in different ways before pasting. The ones available by default include Trim Formatting, Sentence Case, Regex Replace, DeHTML and lots more. 29 |
    • Plugins - Using the API, you can create plugins that can very well extend the functionality of Clipjump. 30 |
    • Channels - You can sort clips in channels. These channels can be activated such that the clips copied automatically move to it. 31 |
    • History Tool - It stores a plain copy of each of the item copied onto Clipjump. By default, it stores the activity of last 30 days. 32 |
    • Action Mode - Another little innovation that saves you from rememebring dozens of shortcuts for different features in Clipjump. Just press Ctrl 33 | ShiftA to see a list of popular functionailities and open them in a snap. 34 |
    • Scripting - ClipjumpCustom.ini is the script file for Clipjump. You can write small, easy-to-understand scripts to personalize Clipjump. 35 |
    • Other features like adding tags to clips, exporting them, copying file directly to clipboard etc are also supported. 36 |
    37 |

    38 | 39 | 40 |

    Changes in this version

    41 |
      42 |
    • Fixed crashing issues in v12.3 by using TooltipEx
    • 43 |
    • Now using SQlite database for History
    • 44 |
    • Ignore quick (<200ms) clipboard changes to prevent crashes
    • 45 |
    • [New] Option to use Win-C and Win-X for copying to Clipjump
    • 46 |
    • [New] Option to disable automatic clipboard monitoring
    • 47 |
    48 |

    49 | 50 | 51 |
    DOWNLOAD


    --------------------------------------------------------------------------------