Score:0

เปิดเอกสารในแอปพลิเคชัน Xorg ที่เปิดใช้งานแล้วจาก bash

ธง tn

มีวิธีบอกโปรแกรม x ที่ทำงานอยู่ให้เปิดไฟล์จาก bash หรือไม่? (กล่าวคือโดยไม่ต้องเรียกใช้อินสแตนซ์ใหม่ของโปรแกรม) ในขณะที่ฉันกำลังถามคำถามนี้ในบริบทของ xstata-mpฉันสนใจมากขึ้นหากมีโซลูชันประเภทนี้อยู่ โดยทั่วไป สำหรับแอปพลิเคชัน Xorg

ฉันมีแอปพลิเคชัน x (xstata-mpกรรมสิทธิ์ซึ่งมีความสำคัญกับคำถามนี้ในขณะที่คุณจะได้เรียนรู้) ซึ่งไหลลื่น ฉันสามารถสร้างสคริปต์เปิดตัวที่ดีซึ่งก่อนอื่นจะตรวจสอบว่า xstata-mp กำลังทำงานอยู่แล้ว และถ้ามี ให้นำมาไว้ที่พื้นหน้า และเปิดใช้อย่างอื่น ชอบมาก คำตอบที่ยอมรับสำหรับคำถามนี้. สิ่งนี้มีความสำคัญเนื่องจากแอปพลิเคชันได้รับการติดตั้งเป็นส่วนหนึ่งของใบอนุญาตไซต์ซึ่งอนุญาตให้มี 'ที่นั่ง' พร้อมกันในจำนวนจำกัดเท่านั้น (ในทางเทคนิคแล้วฉันควรจะเรียกใช้เพียงครั้งเดียวในเครื่องเดียว)

ปัญหาของฉันคือบางครั้งฉันต้องการเปิดไฟล์ เอกสาร ใช้โดย xstata-mp (เช่น ก .dta แฟ้มข้อมูล ก .ทำ ไฟล์สคริปต์ ก .sthlp ไฟล์ช่วยเหลือ ฯลฯ) หากฉันคลิกสองครั้งที่ไอคอนของไฟล์ดังกล่าว หรือเลือกไอคอนแล้วกด <ENTER> ในขณะที่ xstata-mp กำลังทำงานอยู่แล้ว สคริปต์เรียกใช้จะถูกเรียก (มีการอ้างอิงในไฟล์ ผู้บริหาร เป็นส่วนหนึ่งของ xstata-mp's .เดสก์ทอป ไฟล์) และ xstata-mp ถูกยกขึ้นไปบนสุดของหน้าต่างที่มองเห็นได้ แต่ไม่ต้องเปิดเอกสาร

สำหรับสิ่งที่คุ้มค่าตรวจสอบกับ ปิด ปรากฏว่า xstata-mp ไม่ เปิดตัวใหม่ xstata-mp ดำเนินการหากฉันเปิดเอกสารหลายชุดภายในนั้น (เช่น ใช้ <CTRL>-O); ตรงกันข้ามกับพูดว่า ไฟร์ฟอกซ์ และหลายแท็บ/ไซต์

นี่คือสคริปต์เปิดตัวที่ฉันต้องการแก้ไข:

# ตรวจสอบว่า xstata-mp v17 กำลังทำงานอยู่หรือไม่
exit_code_pidof_xstata_mp=$(pidof /usr/local/stata17/xstata-mp)

# หาก xstata-mp v17 ไม่ทำงาน ให้เปิดใช้งานด้วยอาร์กิวเมนต์ $1
ถ้า [ -z "$exit_code_pidof_xstata_mp" ]
  แล้ว
    /usr/local/stata17/xstata-mp -q $1; ออก >/dev/null
 # แต่ถ้า xstata-mp v17 IS ทำงาน ให้นำมาไว้ข้างหน้าแทน
 อื่น
  wmctrl -ia "$(wmctrl -lp | grep "$(pgrep /usr/local/stata17/xstata-mp)" | tail -1 | awk '{ พิมพ์ $1 }')"; ออก > /dev/null
  ไฟ
Score:1
ธง in

First of all you should find out the correct command to open your document. So try to run the following command and see what you get.

/usr/local/stata17/xstata-mp --help

Of course this is the critical part. And here you rely solely on the functionality of your program. If it does not offer that option, well, then you cannot do it, because all a bash can ever do is start another program. From the 9.4 MB user manual with 399 pages I downloaded from StataCorp LLC, there was not a single hint on how to use xstata-mp.

Maybe the -q option is already what you want. But let's assume the right option to add another document to an already running instance of xstata-mp would be -a (like in VS Code: code -a). Then all you have to do, is to add the following line below your else statement:

/usr/local/stata17/xstata-mp -a "$1"

It would open your document and show the current window now.

Lexible avatar
tn flag
ขอบคุณมาร์ค +1 ฉันได้อ่าน `xstata-mp --help` และสิ่งที่ไม่ได้บันทึกไว้ที่นั่นแล้ว (เช่น `doedit` argument) ในเอกสารอย่างเป็นทางการ ฉันกลัวว่าคำตอบเช่นของคุณอาจจะผิด แต่ตั้งคำถามของฉันด้วยความหวังว่าอาจมีมาตรฐานอินเทอร์เฟซบางอย่างสำหรับแอป Xorg ตามคำขอของฉัน (ถ้ามี แสดงว่าไม่ใช่อาร์กิวเมนต์ `-a` ;) (นอกจากนี้: ตัวเลือก `-q` นั้นไม่เกี่ยวข้องกับข้อกังวลของฉันที่นี่)
Lexible avatar
tn flag
เฮ้มาร์ค ฉันเพิ่งเรียนรู้และกำลังเล่นกับ 'xdotool' ซึ่งอนุญาตให้ใครจัดการ (การกดแป้น, ข้อความ, การป้อนตัวชี้, windows, ตัวแปรที่เกี่ยวข้องบางตัว ฯลฯ ) โปรแกรม Xorg เมื่อฉันแก้ไขสคริปต์ให้ใช้งานได้ ฉันจะเขียนคำตอบ แต่ต้องการแจ้งให้ทราบว่ามีวิธีแก้ปัญหาสำหรับแอปพลิเคชัน Xorg โดยทั่วไป! :)))
Lexible avatar
tn flag
ตกลงดูคำตอบของฉัน :)
Score:0
ธง tn

ใช่: มีวิธีบอกโปรแกรม x ที่ทำงานอยู่ให้เปิดไฟล์จาก bash!

ดังนั้น จากคำแนะนำจากฝ่ายสนับสนุนทางเทคนิคของ StataCorp กลับกลายเป็นว่า xdotool (ซึ่งสามารถติดตั้งกับ sudo apt ติดตั้ง xdotoolถ้ายังไม่ได้อยู่ในระบบของคุณ) เสนอวิธีแก้ไขปัญหาในคำถามของฉัน จากเว็บไซต์โครงการ:

xdotool ให้คุณจำลองกิจกรรมการป้อนข้อมูลด้วยแป้นพิมพ์และเมาส์ ย้ายและปรับขนาดหน้าต่าง ฯลฯทำสิ่งนี้โดยใช้ส่วนขยาย XTEST ของ X11 และฟังก์ชัน Xlib อื่นๆ

â ï¸ หมายเหตุ: หากคุณใช้ Wayland โปรดทราบว่าซอฟต์แวร์นี้จะทำงานไม่ถูกต้อง â ï¸

กับ xdotoolคุณสามารถค้นหาหน้าต่างและย้าย ปรับขนาด ซ่อน และแก้ไขคุณสมบัติของหน้าต่าง เช่น ชื่อเรื่อง หากตัวจัดการหน้าต่างของคุณรองรับ คุณสามารถใช้ xdotool เพื่อสลับเดสก์ท็อป ย้ายหน้าต่างระหว่างเดสก์ท็อป และเปลี่ยนจำนวนเดสก์ท็อป

เพื่อแก้ปัญหาของฉันด้วย xdotoolฉันต้องการสร้างไฟล์ xdotool สคริปต์ที่ฉันกำลังเรียก statadoc.xdo:

#!/usr/bin/xdotool
ค้นหา -- ชื่อ "Stata/MP"
พิมพ์ --หน้าต่าง %1 '$1' '$2'
คีย์ --window %1 ย้อนกลับ

ความคิดเห็นเล็กน้อยเกี่ยวกับสคริปต์สั้นนี้:

  1. เส้นทางอาจเป็นอย่างอื่นที่ไม่ใช่ /usr/bin/xdotoolดังนั้นโปรดยืนยันด้วย ซึ่ง xdotool หรือคล้ายกัน.
  2. บรรทัดที่สองจะตรงกับชื่อบางส่วน "สเตตัส/MP 17.0" ด้วยสตริงที่ให้ไว้ด้านบน สิ่งนี้มีประโยชน์ ตัวอย่างเช่น การอัปเกรดเวอร์ชันเป็น 17.1 หรือ 18.x จะไม่ทำให้สคริปต์เสียหาย เดอะ ค้นหา คำสั่งระบุหน้าต่างแอปพลิเคชัน X ที่ฉันต้องการเชื่อมต่อด้วย
  3. xdotool สคริปต์ยอมรับข้อโต้แย้งต่อไปนี้ ทุบตี-ชอบ $1, $2ฯลฯ อนุสัญญา.
  4. เดอะ พิมพ์ คำสั่งพิมพ์ข้อความที่ให้มาอย่างแท้จริง ในกรณีของฉัน เนื้อหาของทั้งสองที่ให้มา $1 และ $2 อาร์กิวเมนต์สตริงในหน้าต่างที่ 1 (และในกรณีของฉันเท่านั้น) ที่ระบุโดย ค้นหา คำสั่งในบรรทัดที่ 2
  5. เดอะ กุญแจ คำสั่งส่ง <ENTER> (หรือ <RETURN> ถ้าคุณต้องการ) ไปยังหน้าต่าง Stata เดียวกัน

ทีนี้มาดูที่สคริปต์เปิดใช้ที่แก้ไขซึ่งเรียกใช้ statadoc.xdo ในบรรทัดที่สามถึงบรรทัดสุดท้าย (ฉันได้เพิ่มส่วนข้างหน้าเพื่อให้ทราบว่าอาร์กิวเมนต์ที่ระบุระบุว่าไฟล์ Stata ประเภทใดประเภทหนึ่งหรือไม่ จำเป็นต้องใช้คำสั่งการใช้ที่แตกต่างกันเพื่อจัดการแต่ละไฟล์อย่างสง่างามหรือไม่ ตัวอย่างของฉันยังไม่สมบูรณ์ แต่ไฟล์เหล่านี้เป็นประเภทไฟล์ ฉันใช้ในงานส่วนใหญ่ของฉัน):

# ตรวจสอบว่าไม่มีข้อโต้แย้ง ถ้าไม่ ไม่ทำอะไรเลย
ถ้า [ -z "$1" ]
  แล้ว
    หยุดพัก
 # มิฉะนั้น ให้ตั้งคำนำหน้าเป็นค่าเริ่มต้น แล้วตรวจสอบ 
 # ไม่ว่าชื่อไฟล์จะลงท้ายด้วย .hlp, .sthlp, .ado, .do หรือ .gph
 อื่น
  คำนำหน้า = "ใช้"
  ถ้า [ ${1##*.} = "hlp" ] || [ ${1##*.} = "sthlp" ] || [ ${1##*.} = "ado" ] || [ ${1##*.} = "ทำ" ]
    แล้ว
      # หากชื่อไฟล์ลงท้ายด้วยหนึ่งในสี่คำนำหน้าเหล่านั้น
      # เปลี่ยนคำนำหน้าเป็น "doedit" เพื่อให้ Stata เปิดเอกสารด้วย 
      # ตัวแก้ไข do-file
      คำนำหน้า = "doedit "
    ไฟ
  # หากชื่อไฟล์ลงท้ายด้วย .gph ให้เปลี่ยนคำนำหน้าเป็น "doedit" 
  # Stata เปิดเอกสารด้วยโปรแกรมดูกราฟ/โปรแกรมแก้ไข
  ถ้า [ ${1##*.} = "gph" ]
    แล้ว
      คำนำหน้า = "การใช้กราฟ"
    ไฟ
  หยุดพัก
  ไฟ

# ตรวจสอบว่า xstata-mp v17 กำลังทำงานอยู่หรือไม่
exit_code_pidof_xstata_mp=$(pidof /usr/local/stata17/xstata-mp)

# หาก xstata-mp v17 ไม่ทำงาน ให้เปิดใช้งานด้วยอาร์กิวเมนต์ $1
ถ้า [ -z "$exit_code_pidof_xstata_mp" ]
  แล้ว
    /usr/local/stata17/xstata-mp -q $1; ออก >/dev/null
 # แต่ถ้า xstata-mp v17 IS ทำงาน ให้นำมาไว้ข้างหน้าแทน
 อื่น
  # อันดับแรก เรียก statadoc.xdo โดยมีคำนำหน้าเป็นอาร์กิวเมนต์แรก 
  # และเส้นทางไฟล์ที่ให้มาเป็นอาร์กิวเมนต์ที่สอง 
  /usr/share/stata17/bin/statadoc.xdo "$prefix" " $1"
  wmctrl -ia "$(wmctrl -lp | grep "$(pgrep /usr/local/stata17/xstata-mp)" | tail -1 | awk '{ พิมพ์ $1 }')"; ออก > /dev/null
  ไฟ

หมายเหตุ: นี่เป็นวิธีแก้ปัญหาสำหรับ Gnome ที่ทำงานบน Xorg

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา