// ==UserScript== // @name NonBreakSpaces+ // @namespace benjol // @description Make Ctrl-space add a non-break-space in textareas // @include http://french.stackexchange.com/questions/* // @include http://meta.french.stackexchange.com/questions/* // @include http://chat.stackexchange.com/rooms/1098/* // ==/UserScript== function inject(f) { var script = document.createElement("script"); script.type = "text/javascript"; script.textContent = "(" + f.toString() + ")()"; document.body.appendChild(script); }; //Note that if you copy in Firefox, you'll get the impression that the nbsp isn't there, but it is! // (https://bugzilla.mozilla.org/show_bug.cgi?id=359303) inject(function () { var nbsp = String.fromCharCode(160), left = "«" + nbsp, //171 right = nbsp + "»", //187 next = left; function insert(field, val) { if(field.selectionStart || field.selectionStart == '0') { var cursorAfter = field.selectionStart + val.length; var first = field.value.slice(0, field.selectionStart); var second = field.value.slice(field.selectionEnd); field.value = first + val + second; field.setSelectionRange(cursorAfter, cursorAfter); } else //won't work in IE, sorry! field.value += val; } $(document).keypress(function(event) { var field = event.target; if(event.ctrlKey && event.charCode == 32) { insert(field, nbsp); event.preventDefault(); } else if (event.charCode == 34) { insert(field, next); next = (next == left) ? right : left; event.preventDefault(); }; }); });