2017-06-03 9 views
5

मैं एक कीबोर्ड शॉर्टकट वाले Google डॉक्स में चयनित टेक्स्ट के ForegroundColor को बदलना चाहता हूं।Google डॉक्स के लिए कस्टम कीबोर्ड शॉर्टकट्स (रंग बदलें - पृष्ठभूमि रंग)

मैं "ForegroundColor" भाग को बदल सकता हूं (फ़ंक्शन सेटकॉलर() पर बाध्य मेनू आइटम के साथ, लेकिन "कीबोर्ड शॉर्टकट भाग" नहीं।

मैं इस code पाया, लेकिन मैं मुसीबत यह लागू करने के लिए है:

$(document).keydown(function(e){ 
    //CTRL + Q keydown combo 
    if(e.ctrlKey && e.keyCode == 81){ 
    $('#output').html("I've been pressed!"); 
    } 
}) 

मेरे कठिनाइयों:

1) मुझे यकीन है कि जहाँ मेरे स्क्रिप्ट संपादक में इस कोड को जगह नहीं कर रहा हूँ (मैं यह जगह करने की कोशिश की नीचे onOpen() फ़ंक्शन में, लेकिन इसके बिना सफलता के ऊपर भी)।

2) मुझे यकीन नहीं है कि $ (दस्तावेज़) का क्या संदर्भ होना चाहिए।

3) मुझे यकीन नहीं है कि "इसके होने के लिए पहले साइडबार पर क्लिक/सक्रिय करने के लिए" का अर्थ क्या है।

function onOpen() { 
    var ui = DocumentApp.getUi(); 
    ui.createMenu('My Menu') 
     .addItem('Color', 'setColor') 
     .addToUi(); 

    var document = DocumentApp.getActiveDocument() // should it be here? 
    $(document).keydown(function(e){ 
    //CTRL + Q keydown combo 
    if(e.ctrlKey && e.keyCode == 81){ 
     SpreadsheetApp.getUi().alert('Hello, world!'); 
    } 
    }) 
} 

function setColor1() { 
    var selection = DocumentApp.getActiveDocument().getSelection(); 
    if (selection) { 
    var elements = selection.getRangeElements(); 
    for (var i = 0; i < elements.length; i++) { 
     var element = elements[i]; 

     // Only modify elements that can be edited as text; skip images and other non-text elements. 
     if (element.getElement().editAsText) { 
      var text = element.getElement().editAsText(); 

      // Edit the selected part of the element, or the full element if it's completely selected. 
      if (element.isPartial()) { 
       text.setForegroundColor(element.getStartOffset(), element.getEndOffsetInclusive(), "#00FFFF"); 
      } else { 
       text.setForegroundColor("#00FFFF"); 
      } 
     } 
    } 
    } 
} 

उत्तर

8

इस पंक्ति में, परिवर्तनीय 'दस्तावेज़' Google Apps स्क्रिप्ट दस्तावेज़ में परिभाषित 'दस्तावेज़' ऑब्जेक्ट का एक उदाहरण है।

var document = DocumentApp.getActiveDocument() 

यह Google दस्तावेज़ पर एक अमूर्त अपनी डिस्क में बैठे है कि आप यहाँ https://developers.google.com/apps-script/reference/document/document

वर्णित विधियों का एक सेट का उपयोग कर अपनी डिस्क फ़ाइलों को संशोधित करने के लिए अनुमति देता है है नीचे लाइन jQuery वाक्य रचना है।

$(document).keydown(function(e){} 

jQuery क्लाइंट-साइड विकास के लिए एक जावास्क्रिप्ट लाइब्रेरी है। इसका उपयोग किसी वेबपृष्ठ के HTML DOM पेड़ पर नेविगेट करने के लिए किया जाता है। $ (दस्तावेज़) डीओएम का jQuery का प्रतिनिधित्व है। JQuery http://jquery.com/

क्योंकि Google Apps स्क्रिप्ट Google सर्वर पर चलती है, स्थानीय रूप से आपकी मशीन पर नहीं, आपके लिए नेविगेट करने के लिए कोई डोम पेड़ नहीं है। आप जीएएस कार्यों तक ही सीमित हैं जो Google सर्वर पर कोड के बिट्स के लिए मैप किए गए हैं। कोड की इन दो पंक्तियों में एक-दूसरे के साथ कुछ लेना देना नहीं है और वे उसी दस्तावेज़ का जिक्र नहीं कर रहे हैं।

वही घटनाओं पर लागू होता है जिन्हें आप सुन सकते हैं। गैस किसी घटना से निपटने के समर्थ होते हैं करता है, घटनाओं की सूची काफी कम है ('देख' सरल ट्रिगर 'और स्थापना योग्य ट्रिगर) https://developers.google.com/apps-script/guides/triggers/

अद्यतन

आप का उपयोग कर अपने स्वयं के कस्टम यूआई का निर्माण करके इस लक्ष्य को हासिल कर सकते हैं HtmlService। चेतावनी यह है कि Google दस्तावेज़ से यूआई तत्व में नियंत्रण करने का कोई तरीका नहीं है, इसलिए आपको प्रत्येक क्रिया के बाद साइडबार पर मैन्युअल रूप से फ़ोकस करना होगा।

यहां उदाहरण दिया गया है कि आपकी परियोजना में .gs फ़ाइल कैसा दिख सकता है। इसे अपने सर्वर ऐप के रूप में देखें।

//creates html output from the template 
function onOpen(){ 


var ui = DocumentApp.getUi(); 
var htmlOutput = HtmlService.createTemplateFromFile('sidebar').evaluate(); 
ui.showSidebar(htmlOutput); 

} 

function setColor1(){ 

    //your code 

} 

नीचे साइडबार टेम्पलेट के लिए मेरे क्लाइंट-साइड कोड है। आप फ़ाइल -> नई -> एचटीएमएल फ़ाइल पर क्लिक करके अपने स्क्रिप्ट संपादक में टेम्पलेट बनाते हैं। यह sidebar कॉल या जो भी आप ऊपर .gs फ़ाइल में var htmlOutput के लिए चुनें। यदि आप 'Ctrl + Q' दबाते हैं, तो साइडबार एक पुष्टिकरण प्रदर्शित करेगा और आपके .gs फ़ाइल में setColor1() फ़ंक्शन को कॉल करेगा।

ग्राहक से सर्वर साइड गैस कार्यों बुला अधिक https://developers.google.com/apps-script/guides/html/reference/run

अधिक HtmlService पर https://developers.google.com/apps-script/guides/html/

स्पष्ट नकारात्मक पक्ष यह है कि साइडबार पहले फोकस प्राप्त करना होगा, ताकि आप हमेशा के बाद उस पर क्लिक करने की जरूरत है चयन करना

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    </head> 
    <body> 

    <p> Press Ctrl + Q to change the color of selected text </p> 
    <p id="log"> </p> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script> 

    $(document).ready(function(){ 

     $(document).keydown(function(e){ 

     if(e.ctrlKey && e.keyCode == 81){ 

      $('#log').html('you pressed Ctrl + Q'); 

      google.script.run.setColor1(); 


     } 

     }); 


    }); 

    </script> 


    </body> 
</html> 

आशा है कि इससे मदद मिलती है!

+0

इस विस्तृत जवाब के लिए धन्यवाद है। मुझे यकीन नहीं है कि मैं हर चीज़ को समझता हूं, लेकिन ऐसा लगता है कि मैं Google Apps स्क्रिप्ट में JQuery वाक्यविन्यास का उपयोग नहीं कर सकता क्योंकि '$ (दस्तावेज़) .keydown (function (e) {} 'एक HTML डोम पेड़ की अपेक्षा करता है जो Google Apps स्क्रिप्ट को प्रदान नहीं करता है। तो ऐसा लगता है वहाँ डॉक्स गूगल के लिए कीबोर्ड शॉर्टकट जोड़ने के लिए कोई रास्ता नहीं है, यह है कि सही? – Enora

+0

मैं अपने जबाब अपडेट किया गया। इस कोड मेरे लिए काम किया है। –

+0

आपका जवाब एकदम सही है के लिए बहुत बहुत शुक्रिया अद्यतन! बहुत खराब गूगल डॉक्स साइडबार के बिना ऐसा करने के लिए एक आसान तरीका है नहीं करता है के रूप में यह स्क्रीन पर जगह का एक बहुत लेता है। – Enora

2

एंटोन डिमेंटेव के सुझाव के अनुसार साइडबार का उपयोग करने के बजाय, modeless dialog box का उपयोग करना संभव है। इसे ओपन() या मेनू आइटम से फ़ंक्शन से चलाया जा सकता है।

  • साइडबार से अधिक प्रणाली का डायलॉग बॉक्स का लाभ: संवाद बॉक्स में छोटा होता है और स्क्रीन पर कहीं भी ले जाने के किया जा सकता है
  • असुविधाजनक (शीर्षक पर एक यह खींचें क्लिक करें): इस पर ध्यान देने के स्थापित करने के लिए आसान है साइडबार, क्योंकि मॉडेलिस डायलॉग बॉक्स पर, आपको फोकस सेट करने के लिए संवाद की सामग्री (जो काफी छोटा हो सकता है) के अंदर क्लिक करना होगा।

.html एक से एंटोन Dementiev दिया ही है, लेकिन .gs अलग है:

function onOpen() { 
    var ui = DocumentApp.getUi(); 

    ui.createMenu('My Menu') 
     .addItem('Open Color Dialog', 'dialogBox') 
     .addToUi(); 

     var htmlOutput = HtmlService // alternative to the sidebar 
     .createHtmlOutputFromFile('sidebar') 
     .setWidth(50) 
     .setHeight(50); 
     DocumentApp.getUi().showModelessDialog(htmlOutput, 'Title'); 

} 


    function dialogBox() { 
     var htmlOutput = HtmlService 
     .createHtmlOutputFromFile('sidebar') 
     .setWidth(50) 
     .setHeight(50); 
     DocumentApp.getUi().showModelessDialog(htmlOutput, 'Title'); 
} 
0

यह साइड बार/प्रणाली का डायलॉग बॉक्स में क्लिक करना करना जटिल करने के लिए वास्तव में है और यह एक प्रकार का जंगली बेर है , इसलिए मैं Autohotkey के साथ कर रहा हूं। यहाँ एक .ahk स्क्रिप्ट (source)

#IfWinActive ahk_exe chrome.exe ; the shortcut will only work on chrome 

!^+p:: 
;PART 1: check if the docs is in full-screen (the script work with the mouse position) 
; put the mouse on the right top corner of the screen, freeze the spy tool, copy past the relative position (1357, 6). 
PixelGetColor ColorWin, 1357, 6 RGB ; get the color of this area 
; In my case this part should be white in full screen 
if (ColorWin!="0xFFFFFF") ; if it's white (= fullscreen is OFF) 
    send {f11}; then press f11 to activate fullscreen 

# 
PixelGetColor ColorText, 647, 86 RGB 
;msgbox, 64, (%ColorText%) ; uncomment if needed for debug to get color to 

; get the mouse position and the color of each one you want 

if (ColorText="0x000000") { ; black 
    click,647, 86 
    click,712, 120 
    click, 786, 177 ; blue 
} 
else If (ColorText="0xFF0000") { ; blue 
    click,647, 86 
    click,712, 120 
    click, 767, 179 ; blue light 
} 

else IF (ColorText="0xE8864A") { ; blue light 
    click,647, 86 
    click,712, 120 
    click, 679, 176 ; red 
} 
else ; 
{ 
    click,647, 86 
    click,712, 120 
    click, 657, 151 ; black 
} 

return 
संबंधित मुद्दे